http缓存机制

来源:互联网 发布:acm编程规则 编辑:程序博客网 时间:2024/06/11 10:01

http缓存机制

按是否向服务器重新请求划分:强制缓存、对比缓存

强制缓存

响应头字段:

决定缓存是否失效的两个字段:Expires/Cache-Control

  • expires:http1.0产物,而现在浏览器基本都是http1.1,此字段决定缓存的到期时间,这个时间是由服务器端设定的,因此可能会和客户端时间存在误差,因此推荐使用cache-control

  • cache-control
    – 常见取值:
    private: 客户端可以缓存
    public: 客户端和代理服务器都可缓存
    max-age=xxx: 缓存的内容将在 xxx 秒后失效
    no-cache: 需要使用对比缓存来验证缓存数据(后面介绍)
    no-store: 所有内容都不会缓存

对比缓存

首次请求返回数据和缓存标识,再次请求带着缓存标识,若没过期返回304,使用缓存数据,若过期返回新的标识以及数据

last-modified/if-modified-since
  • 响应头字段:last-modified:资源最后被修改时间
  • 请求头字段:if-modified-since:如果资源最后修改时间在大于此时间,则返回新的数据,否则返回304
Etag / If-None-Match(优先级高于前两个):
  • 响应头字段:etag:资源的唯一标识
  • 请求头字段:if-none-match:使用上次etag返回的值,若与服务器此时的值相等,返回304使用缓存,否则返回新的数据以及标识

两者区别与关系:

  • 两类缓存规则的不同,强制缓存如果生效,不需要再和服务器发生交互,而对比缓存不管是否生效,都需要与服务端发生交互。
  • 两类缓存规则可以同时存在,强制缓存优先级高于对比缓存,也就是说,当执行强制缓存的规则时,如果缓存生效,直接使用缓存,不再执行对比缓存规则。
  • 强制缓存的使用主要基于时间设定,对比缓存主要基于资源标识,并交由服务器校验判断