http请求的缓存机制
http请求的缓存机制
王潭不是王雨潭 发表于5个月前
http请求的缓存机制
  • 发表于 5个月前
  • 阅读 6
  • 收藏 0
  • 点赞 1
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

客户端缓存和服务端缓存

  • 客户端缓存:既浏览器缓存,保存在本地的缓存,用户可直接从本地读取数据,大大加快请求时间
  • 服务端缓存:代理服务器缓存或反向代理服务器缓存(nginx),CDN也是一种缓存机制,将数据存储在CDN节点中,大大加快用户的访问返回速度

缓存机制

在客户端决定使用本地缓存

在HTTP响应头部定义该资源的缓存策略,包含 Expires和Cache-Control,在此处命中缓存时,返回状态为200(from catch)

Expires:
  • 代表资源到期时间,在此时间之前均可以直接从浏览器缓存取数据
  • 是http 1.0的策略,现在浏览器基本都是http1.1
Cache-Control:
  • Cache-Control比Expires的控制更加细致
  • 包含public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age
  • public 表示响应可被任何缓存区缓存
  • private 只可单个用户的响应消息,不能被共享缓存
  • no-catch 在没有向服务器进行校验的情况下,不可用于后续请求
  • no-store 禁止缓存
  • max-age 当缓存策略为可缓存时指定缓存时间

跟服务端确认后使用本地缓存

Last-Modified/If-Modified-Since
  • HTTP响应头部定义Last-Modified,标示这个响应资源的最后修改时间
  • 之前的Cache-Control中的max-age过期时检验Last-Modified声明
  • 有Last-Modified(最后修改时间)声明则像服务器发请求,并带上If-Modified-Since(上次响应中Last-Modified的值)
  • 如果Last-Modified较新表示资源有修改,直接服务器中读取,响应200(OK);如果Last-Modified较旧,说明资源并没有修改,响应304,客户端从本地读取缓存。
Etag/If-None-Match
  • 与Last-Modified类似,用来标志资源的有效性
  • Etag在服务端设置,表示当前资源的版本。在响应请求时告诉客户端当前的版本
  • 之前的Cache-Control中的max-age过期时检验是否有Etag。如果有的话,再次向web服务器请求时带上头If-None-Match (上一次Etag的值)
  • 如果If-None-Match与Etag值一致说明资源未被改动,响应304,客户端从本地读取缓存。如果值不一样说明资源已经改动,返回200
Etag和Last-Modified的区别
  • Last-Modified标注时间,只能精确到秒级,如果一个资源在一秒内改变多次则无法识别
  • 有时文件被改动,但是内容不变,Last-Modified也会变
  • Etag是服务器自动生成或者由开发者生成的对应资源在服务器端的唯一标识符

先说返回200(from catch)和304的区别

200(from catch): 表示直接从本地浏览器缓存中读取,没有和服务器进行交互。第一次请求该资源的时候设置Expires 或者 Cache-Control: max-age头表示浏览器可以缓存该资源,下次请求的时候该资源还未过期,则可以从浏览器缓存中读取。

304: 表示发送 "If-Modified-Since"请求到服务器,如果资源从上次请求到这次请求没有改变,则返回304。304的速度比200(from catch)更慢

共有 人打赏支持
粉丝 3
博文 16
码字总数 13787
×
王潭不是王雨潭
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: