欢迎光临散文网 会员登陆 & 注册

Http协商缓存

2022-02-07 14:01 作者:不良人王德发  | 我要投稿

虽然http缓存完全是后端处理,但是前端也需要了解。

http缓存是通过 Cache-Control 响应头控制的

Cache-Control 的值和含义常用的有以下几种:

public:中间的代理和客户端都可以缓存,Cache-Control: max-age=60 就是默认 public

private:只有客户端可以缓存,中间的代理不可以缓存

no-store:每次都请求最新的资源文件

no-cache: 协商缓存

Cache-Control: max-age=60 ,强制缓存60秒,60秒之后才会判断协商缓存

下面说说协商缓存:

协商缓存有两种:

1、Last-Modified(响应头)   If-Modified-Since(请求头) 对应,单位是秒,表示文件的修改时间,通过对比 Last-Modified(响应头)   If-Modified-Since(请求头)的值是否相等控制,相等则返回 304 状态码和旧的 Last-Modified ,不相等则返回 200 状态码和新的 Last-Modified 和新的资源文件

2、ETag(响应头)If-None-Match(请求头) 对应,是根据文件内容计算的一串字符

通过对比 ETag(响应头)If-None-Match(请求头)的值控制,相等则返回 304 状态码和旧的 LETag ,不相等则返回 200 状态码和新的 ETag 和新的资源文件

优先级:Last-Modified 和 ETag 同时存在的情况下,ETag 优先级更高。

原因:

1、文件操作一般是毫秒或者微秒级别的,Last-Modified 的单位是秒,可能不会把最新的资源文件返回,ETag是根据文件内容等计算判断是否有修改,可以返回客户端最新的资源文件

2、资源文件可能是不断重复删除然后生成的,文件内容可能没有变化,但是修改时间却变了,这个时候通过 Last-Modified 判断会返回资源文件,但是其实不必,这样就浪费了流量,使用 ETag 就避免了这种情况。

附上一张http判断缓存的流程图:



Http协商缓存的评论 (共 条)

分享到微博请遵守国家法律