【问题标题】:Why are browsers not caching these static files为什么浏览器不缓存这些静态文件
【发布时间】:2013-11-12 19:45:18
【问题描述】:

我的问题似乎与this 重复

但我有案子

  • 当我用 F5 刷新页面时,图像没有从缓存中获取,而是请求发送到服务器,服务器响应 304 状态代码(未修改)
  • 但如果我在地址栏中键入 URL 或从浏览器后退/前进按钮导航页面,则图像来自缓存。

但我在这里有一个疑问,为什么在 F5(页面刷新)上向原始服务器请求缓存图像


Nginx 配置

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
  expires 2d;
  proxy_pass http://localhost:3001;
  break;
}

请求标头

===================================
GET /assets/first_banner.png HTTP/1.1
Host: localhost:3000
Connection: keep-alive
Cache-Control: no-cache
Pragma: no-cache
Accept: image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.65 Safari/537.36
Referer: http://localhost:3000/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
===================================

响应标头:

===================================
HTTP/1.1 200 OK
Server: nginx/1.1.19
Date: Sun, 08 Dec 2013 20:31:06 GMT
Content-Type: image/png
Content-Length: 141498
Connection: keep-alive
Cache-Control: max-age=172800
Last-Modified: Wed, 23 Oct 2013 05:34:11 GMT
Etag: "0fc96d0218a47398d37dacca76916727"
X-Ua-Compatible: IE=Edge
X-Request-Id: 48d1ec3a24e2c0f13250ea74101f6753
X-Runtime: 0.021479
Expires: Tue, 10 Dec 2013 20:31:06 GMT
===================================

【问题讨论】:

  • 不是 304 意味着它从缓存中获取内容吗?我假设它说因为浏览器发出较小的请求,询问服务器自上次以来内容是否发生变化,请尝试使用浏览器中的网络检查器确认响应大小应该更小
  • @MohammadAbuShady 你是对的,但我的问题是,既然我们设置了下一个 30 天过期,那么为什么浏览器要求更改内容?
  • @all,我也添加了请求和响应标头

标签: nginx http-caching casing


【解决方案1】:

当您按下 F5 时,您会告诉浏览器检查网络服务器是否缓存在本地的内容仍然有效。

如果对象在网络服务器上过期,则浏览器会再次获取资产。如果对象仍然有效,则使用本地浏览器缓存的内容。

【讨论】:

  • 已在 Chrome 浏览器中检查,对于缓存文件,它要求内容更改为什么?,我也希望使用本地缓存副本,为什么它没有发生,新浏览器不支持永久缓存吗?
最近更新 更多