http缓存

171 阅读2分钟

强缓存

不需要进行http请求,根据上次请求返回的相关字段来判断资源是否已过期

不同http版本使用的缓存字段:

http版本字段名返回值不足
HTTP/1.0Expires一个具体的时间点服务器的时间跟客户端的时间可能不一致
HTTP/1.1Cache-Control

max-age: max-age=9999
private:只有浏览器可以缓存,中间代理不能
no-cache:不进行强缓存
no-store:不进行任何缓存
s-maxage:代理服务器缓存时间

区分:

  • no-cache:可以在客户端缓存资源,但只能是协商缓存,即 每次使用缓存前都需要服务器重新校验(返回状态200使用新资源,304使用客户端缓存资源)
  • no-store:每次都从服务器获取新资源

协商缓存

若没有强缓存或者强缓存已过期,需携带相关字段(这个字段的值来自上次请求的返回)发起请求,服务器根据这个字段判断是否使用缓存

有两个字段可以实现:

上次请求响应的字段请求携带的字段结果不足
Last-ModifiedIf-Modified-Since如果If-Modified-Since的时间小于资源的最后修改时间,不使用缓存直接进行常规的请求响应过程;反之,返回304,浏览器使用缓存不够精准。
1. 如果只编辑文件但不更改文件内容也会导致缓存失败
2.Last-Modified 能够感知的单位时间是秒,如果文件在 1 秒内改变了多次,那么这时候的 Last-Modified 并没有体现出修改了。
ETag:服务器根据当前文件的内容,生成的文件唯一标识If-None-Match如果If-None-Match与资源的ETag不一致,不使用缓存直接进行常规的请求响应过程;反之,返回304,浏览器使用缓存性能上低于Last-Modified