前端HTTP 缓存简单了解
2021-05-03 02:28
2.1.3 协商缓存能否再用相关字段
当客户端第一次请求的时候没有带条件首部,服务端响应带有条件首部,如Last-Modified ,ETag等,当下次缓存过期客户端将缓存的数据标识发往服务端进行验证。
HTPP定义的条件首部最有用的两个 If-Modified-Since 和If-None-Match:
⑴ Last-Modified 和 If-Modified-Since
Last-Modified(服务器响应首部): 服务器记录的资源的更新时间。
If-Modified-Since(请求首部字段):已缓存副本的最后修改日期。
当缓存过期,再验证。客户端将缓存的数据标识If-Modified-Since发往服务端,服务端将用Last-Modified 与 If-Modified-Since做对比。If-Modified-Since 字段值早于资源的Last-Modified更新时间,则希望返回新资源。而在指定 If-Modified-Since 字段值的日期时间之后,如果请求的资源都没有过更新,则返回状态码 304 Not Modified 的响应。
缺点:last-Modified 只能精确到秒,文件的修改非常频繁,在秒以下的时间内进行修改,Last-Modified不能精确。
一个文件位于多个CDN服务器上内容虽然一样,当修改时间不一样。(比对后会返回信息更新)
所以在 HTTP / 1.1 出现了 ETag 。
⑵ ETag 和 If-None-Match
ETag(服务器响应首部): 实体标识。它是一种可将资源以字符串形式做唯一性标识的方式。服务器会为每份资源分配对应的 ETag值。
If-None-Match(请求首部字段):缓存的实体标签。用于指定 If-None-Match 字段值的实体标记(ETag)值与请求资源的 ETag 不一致时,它就告知服务器处理该请求返回新资源,相反则返回状态码 304 Not Modified 的响应。
当缓存过期,再验证。客户端将缓存的数据实体标签If-None-Match发往服务端,服务端将用If-None-Match 与 ETag做对比。
⑶ 其它if 条件首部参考文档
2.1.4 vary 可以简单了解
vary可以简单了解,后端用于配置。
vary定义如下: