【网络】http缓存机制

HTTP缓存有多种规则,根据是否需要重新向服务器发起请求来分类,我们将其分为两大类

  • 强制缓存
  • 对比缓存

流程

强制缓存流程如下
在这里插入图片描述
对比缓存流程如下
在这里插入图片描述

强制缓存

我们知道,强制缓存在数据为失效的情况下,可以直接使用缓存数据
在没有缓存数据的情况下,像浏览器请求数据时,服务器会将数据和缓存规则一并返回,缓存信息包含在响应header中
对于强制缓存来说,响应header中会有两个字段来表明失效规则Expires/cache-Control

  • Expires
    值为服务端返回的到期时间,在下一次请求时,如果请求时间小于服务端的到期时间,则直接使用缓存数据
    Expires是HTTP1.0的东西,现在默认浏览器均使用HTTP1.1,使用Cache- Control替代,所以他的作用基本被忽略
    另一个问题就是,到期时间是由服务端产生的,但是客户端可能和服务端时间有误差,就会导致缓存命中的误差
  • Cache-Control
    常见的取值有private、public、no-cache、max-age,no-store,默认为prvate
    • private:客户端可以缓存
    • public:客户端和代理服务器都可以缓存
    • max-age = xxx: 缓存内容将在xxx秒后失效
    • no-cache:缓存内容将在xxx秒失效
    • no-cache:需要使用对比缓存来验证缓存数据
    • no-store:所有内容都不会缓存,强制缓存对比缓存都不会触发
      在这里插入图片描述
      如图表示缓存在31536000(365天)内都不会失效,可以直接从缓存数据库获取数据,直接使用

对比缓存

需要进行比较判断才可以使用缓存
对比缓存生效时,状态码为304,且报文大小和请求时间大大减少,原因是服务端在进行表示比较后,只返回header部分,通过状态码通知客户端使用缓存,不再需要将报文主题部分返回给客户端
对于对比缓存来说,缓存标识的传递是我们需要着重了解的,他在请求header响应header间进行传递,分为两种标识传递

  • Last-Modified/If-Modified-Since
    • Last-Modified(响应头)
      在服务器响应请求时,告诉浏览器资源的最后修改时间
      在这里插入图片描述
    • If-Modified-Since(请求头)
      通过此字段通知服务器上次请求时,服务器返回资源最后修改时间,服务器收到后与Last-Modified进行比对
      如果最后修改时间大于If-Modified-Since,说并被修改过,则响应整片资源内容,返回状态码200
      如果小于等于If-Modified-Since,说明资源无新修改,响应304,告知浏览器继续使用所保存的cache
  • If-Modified-Since
    • Etag:服务器响应请求后,告诉浏览器当前资源在服务器的唯一标识(声称规则由服务器确定)
      在这里插入图片描述
    • If-None-Match:再次请求服务器时,通过此字段通知服务器客户端缓存数据的唯一标识,服务器收到后发现有If-None-Match,则与Etag比对
      不同:说明资源被修改过,则响应整片内容,返回200
      相同:说明资源未被修改,响应304,告知浏览器继续使用保存的cache
      在这里插入图片描述

总结

在这里插入图片描述

参考文章
彻底弄懂HTTP缓存机制及原理
一文读懂http缓存(超详细)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值