【问题标题】:Why are browsers not caching these static files?为什么浏览器不缓存这些静态文件?
【发布时间】:2013-05-01 22:41:35
【问题描述】:

这是一个示例 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 重新加载或单击位置栏中的输入时,请求看起来相同(我希望浏览器发送 if-modified -因为等)

至少在 Chrome 和 Firefox 中会发生这种情况。

【问题讨论】:

    标签: http browser


    【解决方案1】:

    可能是因为 URL 的 time 参数随着每次请求而变化。

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

    【讨论】:

    • 其实时间是一样的。我刚刚注意到直接请求文件正在使用缓存!但是当从页面加载时,它并没有这样做。
    • 其实好像被缓存了!但是浏览器没有执行 if-modified-since 并且服务器返回 200 OK,但仍然从缓存中获取它。
    • 开发工具在骗你(或者至少,它们非常具有误导性)。当您看到带有Status Code: 200 OK (from cache) 的请求时,这意味着浏览器甚至没有发出条件HTTP 请求。它只是从缓存中抓取内容——根本没有网络活动。如果你使用 Fiddler 之类的东西,你甚至不会看到请求。