强缓存和协商缓存

216 阅读2分钟
  • 强缓存
  1. 字段:response-Headers里面的 cache-control:max-age 或者是expires: Thu, 03 Jan 2019 11:43:04 GMT。当两个同时使用的时候,max-age会覆盖expires。
  2. cache-control的字段值:
    1. public:表示资源可以被客户端和代理服务器缓存。
    2. private:只能被客户端缓存。private+s-maxage相当于public。
    3. max-age:过期时间,在浏览器生效,优先级小于s-maxage
    4. s-maxage:过期时间,在浏览器和代理服务器中都生效。(s-maxage指令只适用于供多位用户使用的公共缓存服务器,也就是说,对于向同一用户重复返回响应的服务器来说,这个指令没有任何作用。另外,当使用s-maxage指令后,则直接忽略对Expires首部字段以及max-age指令的处理。)
    5. no-cache:客户端强制每次都要向服务器发送请求(不能直接从缓存中读取数据),然后服务器判断有没有过期,过期则返回新的数据,否则走304。(这就是协商缓存了吧)
    6. no-store:不使用缓存策略,禁止一切缓存。
  3. expires是一个GMT时间格式字符串。
  4. 强缓存服务器是会返回一个max-age的时间,在这个时间内再次放服务器发送请求,不会从服务器请求数据,而是在缓存中读取数据并返回(状态码为200)。
  • 协商缓存
  1. 字段:Last-Modified/If-Modified-Since,ETag/If-None-Match (response-headers/request-headers)
  2. ETag是一个字符串(资源唯一标识)。 Last-Modified:资源最后修改的时间(GMT时间格式字符串)。ETag比Last-Modified的优先级更高,更精确。
  3. 协商缓存第一次向服务器发送请求的时候,正常请求,返回的数据携带etag,last-modify。当我们再次发送请求的时候,带上这两个东西,服务器会进行判断有没有发生改变,如果发生改变就返回新的数据,如果没有发生改变,就返回缓存中的数据(这时候状态码为304)。
  • expires和last-modify可以共存。