Http 为什么浏览器不缓存这些静态文件?

Http 为什么浏览器不缓存这些静态文件?,http,browser,Http,Browser,下面是一个JavaScript文件请求/响应示例: Request URL:http://local/index.js?time=1367958844038 Request Method:GET Status Code:200 OK Request Headers Accept:*/* Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3 Accept-Encoding:gzip,deflate,sdch Accept-Language:en-US,en;

下面是一个JavaScript文件请求/响应示例:

Request URL:http://local/index.js?time=1367958844038
Request Method:GET
Status Code:200 OK

Request Headers
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
DNT:1
User-Agent:Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31

Response Headers
cache-control:max-age=31536000
content-encoding:gzip
content-type:application/javascript
expires:Wed, 07 May 2014 20:34:04 GMT
last-modified:Tue, 07 May 2013 20:34:04 GMT
transfer-encoding:chunked
如您所见,服务器响应缓存控制、过期甚至最后一次修改,但每次我使用F5或单击位置栏中的enter重新加载时,请求看起来都是一样的(我希望浏览器在修改后发送,等等)


这至少在Chrome和Firefox中发生。

可能是因为URL的
时间
参数随每个请求而变化


由于URL不同,浏览器无法使用以前缓存的响应。

实际上时间是相同的。我刚刚注意到直接请求文件是在使用缓存!但当从页面加载时,它并没有这样做。实际上它似乎被缓存了!但是浏览器不会执行if-modified,因为服务器返回200 OK,但仍然从缓存中获取。开发工具在欺骗你(或者至少,它们非常误导)。当您看到状态代码为200 OK(从缓存中)的请求时,这意味着浏览器甚至没有发出有条件的HTTP请求。它只是从缓存中抓取了内容——根本没有网络活动。如果你使用像Fiddler这样的东西,你甚至看不到请求。