当前位置:  开发笔记 > 编程语言 > 正文

IIS7缓存控制

如何解决《IIS7缓存控制》经验,为你挑选了5个好方法。

我正在尝试做一些我认为相当简单的事情.获取IIS 7告诉客户他们可以在我的网站上缓存所有图像一段时间,比方说24小时.

我已尝试过http://www.galcho.com/Blog/post/2008/02/27/IIS7-How-to-set-cache-control-for-static-content.aspx上的步骤,但无济于事.我仍然得到返回304s的服务器请求.

有没有人有办法做到这一点?我有一个图形密集型网站,每次他们请求页面时我的用户都被锤击(我的服务器也是如此).很奇怪,这些图像似乎在Firebug中出现了"Cache-Control private,max-age = 3600",但是当我按下F5时,浏览器仍在请求它们.



1> Jeff Atwood..:

如果你想设置Cache-Control标头,那么IIS7用户界面中没有任何东西可以做到这一点,遗憾的是.

但是,您可以将此web.config放在要设置它的文件夹或站点的根目录中:



  
    
      
    
  

这将通知客户端在该文件夹和所有子文件夹中缓存内容7天.

您也可以通过编辑IIS7元数据库来完成此操作appcmd.exe,如下所示:

\Windows\system32\inetsrv\appcmd.exe 
  set config "Default Web Site/folder" 
  -section:system.webServer/staticContent 
  -clientCache.cacheControlMode:UseMaxAge

\Windows\system32\inetsrv\appcmd.exe 
  set config "Default Web Site/folder" 
  -section:system.webServer/staticContent 
  -clientCache.cacheControlMaxAge:"7.00:00:00"


嗨杰夫,你知道如何为不同的mime类型或文件扩展名提供不同的`Cache-Control`(`max-age`)标题?
可以在此处找到staticContent配置元素的MSDN文档:http://msdn.microsoft.com/en-us/library/ms689443.aspx
请参阅下面的360Airwalk帖子,IIS7中有此UI

2> 360Airwalk..:

杰夫,这不是真的.

您只需在IIS 7管理器UI中选择一个文件夹(例如图像或事件默认Web应用程序文件夹),然后单击"HTTP响应标头".然后,您必须在右侧窗格中单击"设置公共标题..",然后选择"过期Web内容".在那里,您可以通过选择"After:",在文本框中输入"24"并在组合框中选择"Hours",轻松配置24小时的最大年龄.

关于web.config条目的第一段是正确的.我将添加cacheControlCustom属性以将缓存控制标头设置为"public"或在这种情况下需要的任何内容.

当然,您可以根据需要提供web.config条目(或文件)来实现相同目的.

编辑:删除了一个令人困惑的句子:)


@Jasper:你可以为每个文件夹设置它.如果您在文件夹上设置缓存控件子文件夹将继承该设置,但您可以再次覆盖它,依此类推.你甚至可以在每个文件的基础上做到这一点.如果你无法访问iis控制台,你也可以通过web.config来完成.查看后者的这篇文章http://stackoverflow.com/questions/2195266/how-to-configure-static-content-cache-per-folder-and-extension-in-iis7
感谢@ 360Airwalk的帖子.您是否知道如何为不同的mime类型或文件扩展名提供不同的`Cache-Control`(`max-age`)标头?

3> Elmer..:

我用这个




使用公共缓存控制标头缓存静态内容500天.


建议的做法是1年基本上365天不再.
500天是不好的,文章讨论了一条RFC规则,告知不要将缓存设置为1年以上https://developers.google.com/speed/docs/best-practices/caching不要将其设置为多个未来一年,因为这违反了RFC指南.

4> AnthonyWJone..:

该F5刷新有"请重新加载当前HTML的语义 其直接依赖关系".因此,您应该期望看到HTML直接引用的任何imgs,css和js资源也被重新获取.当然304是可接受的响应,但F5刷新意味着浏览器将发出请求而不是依赖新的缓存内容.

而是尝试简单地导航到其他地方,然后导航回来.

在大多数浏览器中按f5的同时按住ctrl可以强制刷新,超过304.



5> Luciano Carv..:

当我的编辑被回滚时,补充了Elmer的答案.

使用公共缓存控制标头缓存 365天的静态内容,可以使用以下配置IIS


    

这将转换为如下标题:

Cache-Control: public,max-age=31536000

请注意,最大年龄是以秒为增量,通过积极的32位整数表示为在规定RFC 2616和第14.9.3和14.9.4.这代表最大值2 ^ 31或2,147,483,648秒(超过68年).但是,为了更好地确保客户端和服务器之间的兼容性,我们建议最多使用365天(一年).

如其他答案中所述,您也可以在站点的web.config上使用这些指令来获取所有静态内容.作为替代方案,你可以用它仅适用于特定位置的内容太(样品上30天公共缓存为"CDN"文件夹中的内容):


   
        
             
        
   

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有