浏览器缓存
强缓存
HTTP 1.0 Expires
Expires: Wed, 11 May 2018 07:20:00 GMT
缺点:时间是绝对时间,很难保证用户计算机时间和服务器时间一致
HTTP 1.1 Cache-Control
Cache-Control: max-age=315360000
优先级高于
Expires
Cache-Control
取值如下:
no-store
:不缓存到本地public
:多用户共享private
:只能被终端浏览器缓存no-cache
:缓存到本地,但是使用这个缓存之前,必须与服务器进行新鲜度验证
(1)禁用缓存
Cache-Control: no-store
(2)缓存静态资源
Cache-Control: public, max-age=604800, immutable
(3)重新校验资源
Cache-Control: no-cache
Cache-Control: no-cache, max-age=0
协商缓存
当浏览器对某个资源的请求没有命中强缓存,就会发一个请求到服务器,验证协商缓存是否命中,如果协商缓存命中,请求响应返回的 HTTP 状态为 304
并且会显示一个 Not Modified
的字符串。
那么浏览器如何询问服务器?
If-Modified-Since
浏览器请求服务器的时候带上这个头 If-Modified-Since
,它的值是这个文件上一次服务器返回来的时候携带的 Last-Modified
的 HTTP 头的值。如果服务器有新的资源,那么会返回新的资源,否则响应 304
。
If-None-Match
If-Modified-Since
是根据文件的修改时间定的,而 If-None-Match
携带的值是这个文件的指纹,即上一次服务器返回这个文件携带的 ETag
HTTP 头的值。浏览器将这个信息发送给服务器,可以更为精确地知道这个文件有没有变化。如果服务器有新的资源,返回新的,否则响应 304
状态码。
ETag
优先级高于Last-Modified