HTTP缓存控制

简介

通过复用以前获取的资源,可提高性能,减轻服务端的压力

分类

缓存种类有很多,网关缓存、CDN、反向代理缓存和负载均衡器等部署在服务器上的缓存方式,大致上分两类

私有缓存:浏览器缓存

共享缓存:架设的web代理

缓存操作目标

只能缓存GET 请求,普遍的缓存案例

  • 一个检索请求的成功响应: 对于 GET请求,响应状态码为:200,则表示为成功。一个包含例如HTML文档,图片,或者文件的响应。
  • 永久重定向: 响应状态码:301
  • 错误响应: 响应状态码:404 的一个页面。
  • 不完全的响应: 响应状态码 206,只返回局部的信息。
  • 除了 GET 请求外,如果匹配到作为一个已被定义的cache键名的响应。

缓存控制

Cache-control取值

no-store:缓存中不得存储任何关于客户端请求和服务端响应的内容

no-cache:每次有请求发出时,会将带有本地缓存相关的验证字段发到服务器,服务器会验证缓存是否过期,若未过期(返回304),则缓存才使用本地缓存副本

私有与公共缓存

private|public:控制中间人是否能缓存 目标用户的页面

过期机制

Cache-Control: max-age=31536000
  • 表示资源能够被缓存的最大时间
  • max-age是距离请求发起的时间的秒数
  • 针对应用中那些不会改变的文件,通常可以手动设置一定的时长以保证缓存有效,例如图片、css、js等静态资源

must-revalidate

  • 使用一个陈旧的资源时,必须先验证它的状态

Pragma 头

  • PragmaHTTP/1.0标准中定义的一个header属性,

  • 请求中包含Pragma的效果跟在头信息中定义Cache-Control: no-cache相同,但是HTTP的响应头没有明确定义这个属性,

  • 所以它不能拿来完全替代HTTP/1.1中定义的Cache-control头

新鲜度

在这里插入图片描述

计算缓存寿命

  1. 首先 查 Cache-control: max-age=N的头

  2. 然后 expires属性,比较Expires的值和头里面Date属性的值来判断是否缓存还有效

  3. Last-Modified信息:缓存的寿命就等于头里面Date的值减去Last-Modified的值除以10(注:根据rfc2626其实也就是乘以10%)。

expirationTime = responseTime + freshnessLifetime - currentAge

改进资源

revving

  • 给 不频繁更新的文件在URL后面(通常是文件名后面)会加上版本号
  • 加上版本号后的资源就被视作一个完全新的独立的资源,同时拥有一年甚至更长的缓存过期时长
  • 所有引用这个资源的地方都需要更新链接,通常会采用自动化构建工具在实际工作中完成这些琐碎的工作
  • 加在加速文件后面的版本号不一定是一个正式的版本号字符串,如1.1.3这样或者其他固定自增的版本数。它可以是任何防止缓存碰撞的标记例如hash或者时间戳。

缓存验证

  • 用户点击刷新按钮时会开始缓存验证
  • 如果缓存的响应头信息里含有"Cache-control: must-revalidate”的定义
  • 另外,在浏览器偏好设置里设置Advanced->Cache为强制验证缓存也能达到相同的效果。

ETags

  • 强校验器,是服务器给 UA的 一个不透明的值, UA可以在后续的 if-none-match 头来验证缓存

last-modified

  • 弱校验器: 只能精确到秒,客户端后续可以在请求中带上 if-modified-since 来验证缓存
  • 客户端向 服务端 发起校验时,服务端会返回 200,或者304 not modified ,304响应头也可以同时更新缓存文档的过期时间

Vary响应

Vary HTTP 响应头 决定了对于后续的请求头,如何判断是请求一个新的资源还是使用缓存的文件。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kxQX4CZ3-1589807649327)(C:\Users\weisanju\Desktop\实用图\HTTPVary.png)]

  • vary头有利于内容服务的动态多样性
  • 除了 请求的URI 不同 导致缓存失效以外,还有 区分移动端,桌面端缓存,区分不通编码类型的缓存,区别不通浏览器的缓存
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值