cache

缓存,这个就好说了,浏览器自己会给你缓存。

  • Cache-Control

    如果这个设置了时间, 那么第一次加载的时候会把资源写入磁盘存起来,后续的请求在这一段时间之内,都会去优先在本地去读取,如果找不到资源会去服务器请求。 所以为啥在前端项目里设置资源hash值,为的就是唯一。

  • 304

    这个是在Cache-Control没有设置的情况下 ,不会请求浏览器本地的缓存,会去服务器请求资源。 请求的头部有携带If-Modified-Since: time; If-None-Match: W/"1a3a-16565bcda71",会和服务器的etag进行匹配,如果相同,服务器认为你没有更改 资源,那么就会返回给你304告诉你没有改变数据。但是这个是有http交互的,还是有请求时间的。

复习的时候发现上面说的不明了

强制缓存:

  • http1.0 用的 Expires

  • http1.1 用的 Cache-Control

Expires 和 Cache-Control 共存的时候,Cache-Control 的优先级要高。

为啥Expires会被Cache-control所代替,主要是Expires有误差(比如时区的问题)。

协商缓存用的是:

  • Last-Modified/If-Modified-Since

  • Etag/If-None-Match

Etag/If-None-Match优先级比Last-Modified/If-Modified-Since高

强制缓存优先于协商缓存。

参考:

Last updated