HTTP缓存机制及原理

1 篇文章 0 订阅
1 篇文章 0 订阅

一、首先介绍一下HTTP报文

HTTP报文就是浏览器和服务器通信间响应的数据块。
浏览器向服务器请求数据,发送请求(request)报文;服务器向浏览器返回数据,返回响应(response)报文。

报文信息分两部分:

  1. 包含属性的首部(header)————附加信息(cookie,缓存信息等)与缓存相关的规则信息,都包含在header中。
  2. 包含数据的主体部分(body)————HTTP请求真正想要传输的部分。

二、缓存规则解析

当我们从客户端第一次请求数据时,此时缓存数据库中没有对应的缓存数据,所以我们需要请求服务器,然后服务器接收到请求后,返回数据,再将数据存储到缓存数据库中。
在这里插入图片描述

根据是否需要重新向服务器发起请求来分类,可以分为两大类:强制缓存、对比缓存
强制缓存的流程图:
在这里插入图片描述

对比缓存的流程图:
在这里插入图片描述

三、强制缓存

        缓存规则:强制缓存如果生效,不需要再和服务器发生交互。虽然强制缓存可以和对比缓存同时存在,但强制缓存优先级高于对比缓存,也就是说,当执行完强制缓存后,如果缓存成功就不需要在执行对比缓存。

Expires

        Expires的值为服务端返回的值。也就是到期时间,当下次请求时,请求时间小于服务端返回的到期时间,我们就直接缓存数据。(简而言之就是服务端每过一段时间就会进行一次数据缓存。)
        另外一个就是到期时间是由服务端生成的,但是客户端时间可能跟服务端时间有偏差,这就会导致缓存命中失误。

Cache-Control

Cache-Control 是最重要的规则。常见的取值有private、public、no-cache、max-age,no-store,默认为private。
private: 客户端可以缓存
public:  客户端和代理服务器都可缓存(前端的同学,可以认为public和private是一样的)
max-age=xxx: 缓存的内容将在 xxx 秒后失效
no-cache: 需要使用对比缓存来验证缓存数据(后面介绍)
no-store: 所有内容都不会缓存,强制缓存,对比缓存都不会触发(对于前端开发来说,缓存越多越好,so...基本上和它说886)

四、对比缓存

对比缓存,顾名思义就是进行比较的缓存。
它是通过对比服务端返回的标识来判断数据是否被修改,

我们可以通过对比时间和资源唯一标识,如果有变化就代表服务端的数据进行了修改,我们需要获取数据进行同步。

Last-Modified / If-Modified-Since
Last-Modified:

在这里插入图片描述

If-Modified-Since:
在这里插入图片描述

Etag / If-None-Match(优先级高于Last-Modified / If-Modified-Since)
Etag:

在这里插入图片描述
If-None-Match:
在这里插入图片描述

五、总结

        对于强制缓存,服务器通知浏览器一个缓存时间,在缓存时间内,下次请求,直接用缓存,不在时间内,执行比较缓存策略。
        对于比较缓存,将缓存信息中的Etag和Last-Modified通过请求发送给服务器,由服务器校验,返回304状态码时,浏览器直接使用缓存。

详情可看这位——>大佬

第一次请求

在这里插入图片描述

浏览器再次请求时

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值