在什么情况下可以忽略Expires,Last-Modified和ETags标头?

时间:2011-12-07 12:39:04

标签: caching http-headers etag last-modified

我有一个网站收到许多意外的静态资源请求(图像,css文件等),我希望这些请求可以直接从浏览器的缓存中提供。这是一个性能问题,我无法理解为什么会发生这种情况。

对于每个静态资源,网站将来会返回24小时的Expires标头,修改图像/ css文件日期的Last-Modified标头和ETag

Expires: Wed, 07 Dec 2011 13:50:47 GMT
Last-Modified: Thu, 14 Jul 2011 15:19:16 GMT
ETag: W/"4875-1310656756000"

使用这些设置,我希望在浏览器第一次请求图像或css文件后:

  • 它不会再重新请求该资源24小时
  • 24小时后,它将重新请求资源,传递If-Modified-Since标头和If-None-Match标头,服务器将以304状态响应(假设没有任何更改)服务器端)。

这是大部分时间发生的事情。

但是我看到一些浏览器会话,其中静态资源似乎没有被缓存,并且每个页面都要求

查看这些请求时,我看不到收到任何If-Modified-SinceIf-None-Match标头。然后,服务器每次都以200状态响应,并返回所请求的资源。这是我想要追踪的性能问题。

我怀疑问题是由于浏览器和网站之间存在HTTP代理/缓存(问题会话通常来自公司防火墙后面)。如果是这样,我不明白为什么代理会以这种方式干扰Expires / Etag / Last-Modified标头。

如果它们相关,可以提供几条额外的信息:

  • 我目前没有设置Date标头。 Expires / Last-Modified标头是否需要正常工作?
  • 我当前没有设置Cache-Control标题,认为Expires / Last-Modified会“足够好”。
  • 该网站部署在https和http上,我在两个部署中都看到了这个问题。我认为这会阻止代理成为原因,但现在明白某些代理会拦截SSL流量。

有没有其他人经历过类似的事情并发现它为什么会发生?

0 个答案:

没有答案