HTTP标头 - 缓存问题

时间:2011-05-24 20:12:41

标签: browser cache-control

我正在向图像发出请求,我收到的响应标题是:

Accept-Ranges:bytes
Content-Length:4499
Content-Type:image/png
Date:Tue, 24 May 2011 20:09:39 GMT
ETag:"0cfe867f5b8cb1:0"
Last-Modified:Thu, 20 Jan 2011 22:57:26 GMT
Server:Microsoft-IIS/7.5
X-Powered-By:ASP.NET

请注意缺少Cache-Control标题。

在Chrome上的后续请求中,Chrome知道要转到缓存以检索图像。它如何知道使用缓存?我的印象是我必须使用Cache-Control标题告诉它。

2 个答案:

答案 0 :(得分:3)

您同时拥有ETagLast-Modified标头。它可能会使用那些。但要实现这一点,它仍然需要分别使用If-None-MatchIf-Modified-Since发出请求。

答案 1 :(得分:1)

设置Cache-Control您必须自己指定。您可以在web.config中执行此操作,在所选文件夹的IIS管理器中执行此操作(静态,图像...)或在代码中设置它。 HTTP 1.1标准建议将来一年作为最长到期时间。

将未来一年的到期日设置为您网站中所有静态内容的良好做法。在标头中没有它导致If-Modified-Since请求,这可能比第一次请求小静态文件花费更长的时间。在这些调用中使用ETag标头。

当您有Cache-Control: max-age=315360000基本HTTP响应时,将超过If-Modified-Since>次调用,因此最好删除ETag标头并导致较小的静态文件响应标头。 IIS没有为此设置,因此您必须在response.Headers.Remove("ETag");

中执行OnPreServerRequestHeaders()

如果您想进一步优化您的标题您可以在IIS设置中删除X-Powered-By:ASP.NET并在web.config中删除X-Aspnet-Version标题(尽管我没有在您的回复中看到) - {{1}在system.web / httpRuntime元素中。

有关更多提示,我建议使用好书 - http://www.amazon.com/Ultra-Fast-ASP-NET-Build-Ultra-Scalable-Server/dp/1430223839