Kei*_*ith 11 iis iis-7 caching http
我不确定这是否是服务器问题,或者我是否无法理解HTTP缓存是如何工作的.
我有一个在IIS7上运行的ASP MVC应用程序.作为网站的一部分,有很多静态内容,包括大量的CSS,Javascript和图像文件.
对于这些文件,我希望浏览器将它们缓存至少一天 - 我们的.css,.js,.gif和.png文件很少更改.
我的web.config是这样的:
<system.webServer>
<staticContent>
<clientCache cacheControlMode="UseMaxAge"
cacheControlMaxAge="1.00:00:00" />
</staticContent>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是浏览器(经过测试的Chrome,IE8和FX)似乎没有像我期望的那样缓存文件.我有默认设置(在IE中自动检查新页面).
首次访问内容时按预期下载
HTTP/1.1 200 OK
Cache-Control: max-age=86400
Content-Type: image/gif
Last-Modified: Fri, 07 Aug 2009 09:55:15 GMT
Accept-Ranges: bytes
ETag: "3efeb2294517ca1:0"
Server: Microsoft-IIS/7.0
X-Powered-By: ASP.NET
Date: Mon, 07 Jun 2010 14:29:16 GMT
Content-Length: 918
<content>
Run Code Online (Sandbox Code Playgroud)
我认为Cache-Control: max-age=86400应该告诉浏览器不要再次请求页面一天.
好的,现在重新加载页面,浏览器再次请求图像.这次它使用这些标题获得空响应:
HTTP/1.1 304 Not Modified
Cache-Control: max-age=86400
Last-Modified: Fri, 07 Aug 2009 09:55:15 GMT
Accept-Ranges: bytes
ETag: "3efeb2294517ca1:0"
Server: Microsoft-IIS/7.0
X-Powered-By: ASP.NET
Date: Mon, 07 Jun 2010 14:30:32 GMT
Run Code Online (Sandbox Code Playgroud)
所以看起来浏览器已经发送ETag回来(作为资源的唯一ID),服务器返回304 Not Modified - 告诉浏览器它可以使用以前下载的文件.
在我看来,这对许多缓存情况都是正确的,但在这里我不想要额外的往返.当服务器上的文件发生变化时,我不关心图像是否过时.
有很多这些文件(即使使用精灵地图等),我们的许多客户都有非常慢的网络.对于该304状态执行ping的每次往返大约需要10到5秒.许多人也有IE6,一次只有2个HTTP连接.最终结果是我们的应用程序对于这些客户端来说似乎非常慢,每个页面花费额外的几秒钟来检查静态内容是否未发生变化.
我遗漏了什么响应标题会导致浏览器积极地缓存文件?
我如何在IIS7的.Net web.config中设置它?
我是否误解了HTTP缓存的工作原理?
您需要使用Expires指令,否则浏览器将始终检查内容是否已更新.
如果缓存条目具有有效的到期日期,则浏览器可以重新使用该内容,而无需在重新访问页面或站点时完全联系服务器.这大大减少了频繁访问的页面的网络往返次数.例如,Google徽标设置为在2038年到期,只会在您第一次访问google.com时下载,或者如果您清空了浏览器缓存.如果他们想要更改图像,他们可以使用不同的图像文件名或路径.
要在IIS7中更改使用以下内容.如果将静态内容保留在特定目录中,则最容易管理.
登录到服务器
打开IIS管理器(开始 - >管理工具 - > iis管理器
展开服务器节点
展开站点节点
打开站点并导航到要更改的目录
打开IIS HTTP响应标题部分
单击设置公用标题右侧的任务窗格
根据您的应用需要设置"过期Web内容".
使用expires头而不是使用cache-control.第一次从我的浏览器缓存向我提供内容,直到此到期日为止.在您的到期日之前,不会对文件中的更改进行交叉检查.
在web.config的system.webServer部分添加标题,如下所示:
<system.webServer>
<staticContent>
<clientCache httpExpires="Sun, 29 Mar 2020 00:00:00 GMT"
cacheControlMode="UseExpires" />;
</staticContent>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15390 次 |
| 最近记录: |