我有一个网站收到许多意外的静态资源请求(图像,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文件后:
If-Modified-Since
标头和If-None-Match
标头,服务器将以304
状态响应(假设没有任何更改)服务器端)。这是大部分时间发生的事情。
但是我看到一些浏览器会话,其中静态资源似乎没有被缓存,并且每个页面都要求。
查看这些请求时,我看不到收到任何If-Modified-Since
或If-None-Match
标头。然后,服务器每次都以200
状态响应,并返回所请求的资源。这是我想要追踪的性能问题。
我怀疑问题是由于浏览器和网站之间存在HTTP代理/缓存(问题会话通常来自公司防火墙后面)。如果是这样,我不明白为什么代理会以这种方式干扰Expires
/ Etag
/ Last-Modified
标头。
如果它们相关,可以提供几条额外的信息:
Date
标头。 Expires
/ Last-Modified
标头是否需要正常工作?Cache-Control
标题,认为Expires
/ Last-Modified
会“足够好”。有没有其他人经历过类似的事情并发现它为什么会发生?