浏览器缓存

浏览器缓存

强缓存

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