IIS7caching控制

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

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

有没有人有办法做到这一点? 我有一个graphics密集的网站,我的用户每次请求一个页面时都会受到攻击(我的服务器也是如此)。 图像似乎有“caching控制私人,最大年龄= 3600”出现在Firebug中,但浏览器仍然请求他们时,我按F5。

如果你想设置Cache-Control头,IIS7用户界面没有任何东西可以做到这一点,可悲的是。

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

<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <staticContent> <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" /> </staticContent> </system.webServer> </configuration> 

这将通知客户端在该文件夹和所有子文件夹中caching7天的内容。

你也可以通过appcmd.exe编辑IIS7configuration数据库,如下所示:

 \的Windows \ SYSTEM32 \ INETSRV \ Appcmd.exe的 
  设置configuration“默认网站/文件夹” 
   -section:system.webServer / staticContent 
   -clientCache.cacheControlMode:UseMaxAge

 \的Windows \ SYSTEM32 \ INETSRV \ Appcmd.exe的 
  设置configuration“默认网站/文件夹” 
   -section:system.webServer / staticContent 
   -clientCache.cacheControlMaxAge: “7.00:00:00”

杰夫,这不是真的。

您只需在您的IIS 7pipe理器用户界面(例如图像或事件的默认Web应用程序文件夹)中select一个文件夹,然后单击“HTTP响应标题”。 然后,您必须在右侧窗格中单击“设置通用标题..”并select“过期Web内容”。 您可以通过select“After:”,在文本框中input“24”,然后在combobox中select“Hours”,轻松configuration24小时的最大年龄。

关于web.config条目的第一段是正确的。 我会添加cacheControlCustom属性来设置caching控制头为“公共”或任何需要在这种情况下。

当然,您可以根据需要提供web.config条目(或文件)。

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

我用这个

 <staticContent> <clientCache cacheControlCustom="public" cacheControlMode="UseMaxAge" cacheControlMaxAge="500.00:00:00" /> </staticContent> 

使用公共caching控制标头caching500天的静态内容。

F5 Refresh具有“请重新加载当前HTML及其直接依赖关系”的语义。 因此,您应该期望看到任何由HTML直接引用的imgs,css和js资源也被重新获取。 当然304是一个可以接受的回应,但F5刷新意味着浏览器将提出请求,而不是依靠新的caching内容。

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

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

补充埃尔默的回答,因为我的编辑被回滚。

使用公共caching控制标头caching 365天的静态内容,可以使用以下configuration来configurationIIS

 <staticContent> <clientCache cacheControlCustom="public" cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" /> </staticContent> 

这会翻译成这样的标题:

 Cache-Control: public,max-age=31536000 

请注意,max-age是以秒为单位的增量,用正数32位整数表示,如RFC 2616部分14.9.3和14.9.4中所述 。 这代表最高值2 ^ 31或2,147,483,648秒(超过68年)。 但是,为了更好地确保客户端和服务器之间的兼容性,我们采用build议的最长365天(一年)。

正如其他答案中提到的,您也可以在您的站点的web.config中使用这些指令来获取所有静态内容。 或者,您也可以将其仅用于特定位置的内容 (在示例中,“cdn”文件夹中的内容的公共caching为30天):

 <location path="cdn"> <system.webServer> <staticContent> <clientCache cacheControlCustom="public" cacheControlMode="UseMaxAge" cacheControlMaxAge="30.00:00:00"/> </staticContent> </system.webServer> </location> 

有一个简单的方法:1.使用网站的web.config 2.在“staticContent”部分删除特定的fileExtension并添加mimeMap 3.添加“clientCache”

 <configuration> <system.webServer> <urlCompression doStaticCompression="true" doDynamicCompression="true" /> <staticContent> <remove fileExtension=".ipa" /> <remove fileExtension=".apk" /> <mimeMap fileExtension=".ipa" mimeType="application/iphone" /> <mimeMap fileExtension=".apk" mimeType="application/vnd.android.package-archive" /> <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="777.00:00:00" /> </staticContent> </system.webServer> </configuration>