β

200 OK (from cache)和304 Not Modified

与您分享电脑世界 125 阅读

引发这个问题是今天测试前段图片服务器发现已经做了缓存还时不时200或304 经过检查原来是etag发生了变化,后端图片服务器上的文件生成时间不一致导致。改变 nginx 按ip分配即可。

这里简单说下:200是正常访问后的状态,200 OK (from cache)  是浏览器没有跟服务器确认,直接用了浏览器缓存;而 304 Not Modified 是浏览器和服务器多了一次缓存确认有效性,再用的缓存。

服务器返回如下几个缓存控制头部:

  1. Last-Modified:表示文档的最后修改时间,当去服务器验证时会拿这个时间去;
  2. Expires: http /1.0规范定义,表示文档在浏览器中的过期时间,当缓存的内容超过这个时间则需要重新去服务器获取最新的内容;
  3. Cache-Control:http/1.1规范定义,表示浏览器缓存控制,max-age=3153600表示文档可以在浏览器中缓存一年。
  4. ETag:发送到服务端进行内容变更验证的,而Catch-Control是用于控制缓存时间的(浏览器、代理层等)。nginx在生成etag时使用的算法是Last-Modified + Content-Length计算的。

总结:

  1. Last-Modified/Modified-Since 用于验证文档内容是否变更
  2. max-age/Expires 定义文档缓存时间,如在有效期内会返回 200(from cache)

这里以nginx为例

 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
  #etag off;
  #proxy_http_version 1.1;
  expires 1d;
 }
作者:与您分享电脑世界
NetPc.com.cn
原文地址:200 OK (from cache)和304 Not Modified, 感谢原作者分享。

发表评论