gpt4 book ai didi

HTTP缓存困惑

转载 作者:可可西里 更新时间:2023-11-01 15:10:10 24 4
gpt4 key购买 nike

我不确定这是服务器问题,还是我没有理解 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>

我遇到的问题是浏览器(经过测试的 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>

我认为 Cache-Control: max-age=86400 应该告诉浏览器在一天内不要再次请求该页面。

好的,现在页面重新加载,浏览器再次请求图像。这次它得到一个带有这些 header 的空响应:

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

所以看起来浏览器已将 ETag 发回(作为资源的唯一 ID),并且服务器返回 304 Not Modified - 告诉它可以使用以前下载的文件的浏览器。

在我看来这对于许多缓存情况都是正确的,但在这里我不想要额外的往返。当服务器上的文件更改时,我不关心图像是否过时。

有很多这样的文件(即使有 sprite-maps 之类的),而且我们的许多客户的网络速度非常慢。 ping 304 状态的每次往返大约需要十分之一到五分之一秒。许多也有 IE6,一次只有 2 个 HTTP 连接。最终结果是我们的应用程序对于这些客户端来说显得非常慢,每个页面都需要额外几秒钟来检查静态内容是否未更改。

我缺少什么响应 header 会导致浏览器主动缓存文件?

我如何在 IIS7 的 .Net web.config 中设置它?

我是不是误解了 HTTP 缓存的工作原理?

最佳答案

需要使用Expires指令,否则浏览器会一直检查内容是否更新。

如果缓存的条目具有有效的到期日期,则浏览器可以在重新访问页面或站点时重新使用内容而无需联系服务器。这大大减少了频繁访问页面的网络往返次数。例如,Google Logo 设置为 2038 年到期,并且只会在您首次访问 google.com 或清空浏览器缓存时才会下载。如果他们想更改图像,可以使用不同的图像文件名或路径。

要在 IIS7 中进行更改,请使用以下内容。如果您将静态内容保存在特定目录中,这是最容易管理的。

登录服务器
打开 IIS 管理器(开始 -> 管理工具 -> iis 管理器
展开服务器节点
展开站点节点
打开站点并导航到您要更改的目录
打开 IIS HTTP 响应 header 部分
点击右侧任务栏的Set Common Headers
根据您的应用要求设置“使 Web 内容过期”。

关于HTTP缓存困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2990457/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com