缓存头Cache-Control的含义与使用

缓存头是指:response的返回结果可被中间经过的各代理服务器以及请求浏览器缓存
缓存的意义是我不需要每次都到业务服务器去请求数据,只需要在中间缓存中获取即可,提升了获取数据效率及响应速度,当然数据变化频率很快的场景并不适合开启Cache-Control。
可缓存参数:public 、private 、no-cache
public : 可被中间经过的各代理服务器以及请求浏览器缓存
private : 只能被请求浏览器缓存
no-cache : 哪里都不能缓存

缓存到期
max-age = <seconds>
含义:浏览器缓存的到期时间,到期后继续去业务服务器请求

s-max-age = <seconds>
含义:s-max-age与max-age的区别是代理服务器优先使用s-max-age

max-stale = <seconds> 含义:即使请求到期了,发起端在request中代理max-stale头依然可以坊问过期的缓存。备注:resopnse中加max-stale头是毫无意义的

实战案例
案例说明:我的html加载了css、js等请求,我预计这些静态文件不会被经常改动,所以我把缓存时间设置的比较长,可能是一年。 但是我中途业务需要我把静态文件改了,客户端怎么生效呢?
解决方案:一般情况下静态文件改了,会根据文件内容生成一段hash码来改变静态文件的名字,这样request url就会被改变,之前的缓存就不会被命中,那么新的改动就生效了。这是业界的最常用的方法。

no-cache的策略,缓存验证Last-Modified与Etag
其实no-cache并非完全不使用本地或代理缓存,只是每次使用前需要到服务器端进行验证。
Last-Modified : 本地与服务器资源的最后修改时间不一致,则使用服务器资源
Etag : 比Last-Modified更严谨,取文件的hash码来比较,若有任务的内容改动则使用服务器资源

Cache-Control命中流程
在这里插入图片描述

篇外
http协议之所以被称为协议是因为它里面的所有header头、请求方法等都只是约定,你可以遵守也可以不遵守,再次申明它只是约定,没有任何功能的。
比如 ‘s-max-age’ : '2000’时,代理服务器可能缓存了,但也可能没缓存,这要看你使用的代理服务器的具体功能特性

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值