HTTP缓存机制

Youky ... 2021-10-11 计算机网络
  • 应用层
  • HTTP
About 2 min

# HTTP缓存机制

# 缓存的分类

首先通过cache-control字段判断缓存数据是否过期:

  • 若缓存可用,直接使用
  • 否则进入协商缓存阶段,发送HTTP请求,服务端通过If-Modified-sinceIf-None-Match字段检查是否更新
    • 若资源未更新:返回304,告诉浏览器从缓存中读取数据
    • 若资源更新:返回200,并附带资源

用到的字段:

  • 强制缓存:cache-control
  • 协商缓存:
    • ETag
    • Last-Modified

# 实现缓存机制的有关字段

# cache-control

作为请求字段

  • no-cache:不使用缓存,强制向服务器进行确认
  • max-age:最多缓存多久。取值为相对值,相对于资源被请求时服务器记录的时间
  • only-if-cached:从缓存获取资源

作为响应字段

  • public/private:是否允许中间服务器进行缓存
  • no-cache:客户端后续每次请求必须先向服务器确定资源的有效性。若资源未改变则返回304,客户端再使用缓存数据
  • no-store:不进行缓存,每次都向服务器请求资源,返回数据和200

# If-Modified-Since

用于请求头中,和响应中的last-modified对应,表明能接受的最后更新时间

# Last-Modified

资源最后的修改时间。

如果编辑了文件,但其实内容没有修改,也会造成缓存失效。

# If-None-Match

取值为服务器返回的ETag字段的内容,比较ETag是否发生变化和响应中的ETag对应。

If-Modified-Since优先级更高

# ETag

资源的唯一标识。编辑了文件但未改变内容时,ETag不会改变

ETag如何生成?

没有明确的生成办法,一般使用内容最后修改时间的散列值

# only-if-cached

客户端只接受缓存数据,不向源服务器请求

# 代理缓存

# 意义

通过在代理服务器进行缓存,减少源服务器的压力。

但对于私密数据,一般不会进行代理缓存。

# 涉及到的字段

  • 开启代理缓存:Cache-Control: public
  • 控制缓存在代理服务器中的有效时间:s-maxage
Last update: November 27, 2021 21:16
Contributors: youky7