1.Expires
存储绝对时间,强缓存.
在没有禁用缓存并且没有超过有效时间的情况下,再次访问这个资源就命中了缓存,不会向服务器请求资源而是直接从浏览器缓存中取。
2.Cache-Cotrol
存储相对时间,在时间到期之前都会进行缓存,优先级比Expires高
1. max-age 指定一个时间长度,在这个时间段内缓存是有效的,单位是s。例如设置 Cache-Control:max-age=31536000,也就是说缓存有效期为(31536000 / 24 / 60 * 60)天,第一次访问这个资源的时候,服务器端也返回了 Expires 字段,并且过期时间是一年后。
2. s-maxage 同 max-age,覆盖 max-age、Expires,但仅适用于共享缓存,在私有缓存中被忽略。
3. public 表明响应可以被任何对象(发送请求的客户端、代理服务器等等)缓存。
4. private 表明响应只能被单个用户(可能是操作系统用户、浏览器用户)缓存,是非共享的,不能被代理服务器缓存。
5. no-cache 强制所有缓存了该响应的用户,在使用已缓存的数据前,发送带验证器的请求到服务器。不是字面意思上的不缓存。
6. no-store 禁止缓存,每次请求都要向服务器重新获取数据。
7、must-revalidate指定如果页面是过期的,则去服务器进行获取。这个指令并不常用,就不做过多的讨论了。
3.Last-Modified(res) / If-Modified-Since(req)
协商缓存,服务器返回Last-Modified表示文件的更改时间,浏览器记录,并在请求头的If-Modified-Since字段发送,如果两者相等,则文件为修改,使用缓存,相应码为304.
反之,两者不一致,则文件改动过,返回新内容
改动后
4:If-None-Match(req) / ETag(res)
和If-Modified-Since / Last-Modified 类似,但是可以使用自定义的内容表示是否更改(3只能使用文件更改时间),返回码也是304
这里就可以用文件大小和文件编码时间拼接起来作为协议字段
更改后
5. 禁止缓存
刷新浏览器或者使用了disabled-cache浏览器则不会触发缓存