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