3

我有一个网站正在接收许多对静态资源(图像、css 文件等)的意外请求,我希望这些请求可以直接从浏览器的缓存中获得。这是一个性能问题,我不明白为什么会这样。

对于每个静态资源,网站返回一个Expires未来 24 小时的Last-Modified标题、一个图像/css 文件修改日期的标题和一个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 代理/缓存(问题会话通常来自公司防火墙后面)。如果是这样,我不明白为什么代理会以这种方式干扰 // 标ExpiresEtagLast-Modified

如果它们相关,请提供一些附加信息:

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

有没有其他人经历过类似的事情并发现它发生的原因?

4

0 回答 0