罗剑锋透视HTTP协议学习笔记---22 | 冷链周转:HTTP的缓存代理

44 篇文章 6 订阅

22 | 冷链周转:HTTP的缓存代理

HTTP的缓存代理就是提供缓存服务的代理服务器,由于它处于HTTP传输路径的中间位置,所以它兼具Cache-control在服务器,客户端2个方向的设置,同时又特有代理服务器的若干缓存配置属性。

缓存是怎么来的?
缓存是某次用户的直接或间接请求,存储在客户端或缓存代理服务器上的某个URI标识的资源。
缓存策略按方向可以分为WEB服务器缓存策略,客户端缓存策略。
WEB服务器缓存策略应用到客户端和缓存代理服务器,是一组Cache-Control的设置,且并不会区分接收对象。客户端,缓存代理接收到的缓存策略是一样的,需自行甄别,如某些针对缓存代理的设置,客户端忽略即可。
类似的,客户端的缓存策略由缓存代理和服务器执行。

服务器端,根据存储策略的不同,缓存可以区分为private,public,标记为private的缓存不允许存储在缓存代理上,public则可以,所以private仅请求者可用,public所有客户端可用。

缓存代理和非缓存代理相比,增加了几个缓存控制的头字段

  1. private/public
  2. no-transform, 即不允许对资源做格式转换
  3. proxy-revalidate, 这个在客户端生效,即public缓存回源仅回到缓存代理,而不去源服务器。

客户端Cache-Control头字段应用到服务器和缓存代理
only-if-cached,只接受缓存,否则返回504
max-age,表示只接受age<max-age的缓存
max-stale,可接受的过期时间
min-fresh,至少剩余的保鲜时间

补充:
关于must-revalidate和proxy-revalidate
proxy-revalidate的意思似乎是针对存储在本地的共享缓存的验证策略,如果过期,则回代理验证。【补充2:这个结论是错误的,proxy-revalidate和must-revalidate的区别在于proxy-revalidate针对共享缓存,所以它应用在proxy上,所以类似must-revalidate,代理服务器的缓存过期后,需要回源服务器验证。】

must-revalidate
Indicates that once a resource becomes stale, caches must not use their stale copy without successful validation on the origin server.
proxy-revalidate
Like must-revalidate, but only for shared caches (e.g., proxies). Ignored by private caches.

课后作业

加入了代理后 HTTP 的缓存复杂了很多,试着用自己的语言把这些知识再整理一下,画出有缓存代理时浏览器的工作流程图,加深理解。
客户端发起请求时先检查是否有本地缓存,缓存是否过期,根据缓存策略,决定是否发送报文
proxy-revalidate, max-age>0, 不发消息,直接用本地缓存
proxy-revalidate, max-age <=0, 发消息,如果s-maxage>0,用代理缓存,否则由代理向源服务器发起请求
no-store,不用缓存
no-cache,源服务器验真
must-revalidate, 过期源服务器验真

缓存的时间策略很重要,太大太小都不好,你觉得应该如何设置呢?
频繁变动的资源max-age时间设短一点,反之长一点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值