http缓存 1970-01-01 00:00

ETag

服务器生成并返回一个随机Etag,通常是文件内容的哈希值或者某个其他指纹码。客户端不必了解指纹码是如何生成的,只需要在下一个请求中将其发送给服务器:如果指纹码仍然一致,说明资源未被修改,服务器可以直接返回304从而让客户端跳过下载。

服务器返回的Etag是 1507311446 状态码是200

etag1

刷新页面,浏览器if-None-Match带的上次服务器返回的Etag 1507311446 ,服务器生成的Etag还是这个,直接返回304给浏览器。

etag2

Cache-Control

Etag是弊端是每次都要向服务器发送请求。最好是不与服务器进行通信的请求:通过响应的本地副本,避免所有的网络延迟以及数据传输的数据成本。 这就是Cache-Control的作用。Cache-Control有很多设置,具体可以谷歌下。

第一次请求,服务器设置了Cache-Control:max-age=60,意思是:60S内可以取本地副本。

cache-control1

新建标签页再次请求,可以看到from cache 字样。注意:如果使用的是刷新,浏览器会无视Cache-Control的设置继续向服务器请求。

cache-control2

Expires

在HTTP 1.1已经被Cache-Control代替了。可以不用考虑了。

Last-Modified

和ETag类似,服务器给客户端一个资源的最后修改时间。客户端浏览器下次请求就会带上If-Modified-Since,就是上一次从服务器给的日期。服务器判断如果文件没有发生变更就返回304。

参考:

https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching?hl=zh-cn#cache-control

http://www.cnblogs.com/kaima/archive/2009/10/13/1582337.html