谈谈HTTP缓存

什么是 HTTP 缓存

HTTP 缓存是用于临时存储 Web 资源副本的,以减少服务器延迟的一种信息技术。

简单来说,就是在打开网页的时候,将网页中可能重复加载的资源,按照一定的规则保存到本地,以便第二次打开同样的网站时,可以重复利用已有资源。

两种缓存机制

在这里插入图片描述
在这里插入图片描述
不同的缓存机制对待网络资源的方式是不一致的,常见的缓存机制有两种:协商缓存和强缓存。

假设资源A在本地的一个角落里,现在我们再一次请求资源A

  • 强缓存 —— 浏览器说了算
    表现形式:
200 OK (from memory cache)
200 OK (from disk)

浏览器发现本地资源 A 后,浏览器根据之前服务器说下的验身规则,给本地资源 A 验明正身。 如果符合要求,浏览器直接返回这个本地资源;否则,浏览器会向服务器发一个资源请求。

  • 协商缓存 —— 服务器说了算
    浏览器发现本地资源 A 后,浏览器给服务器发一个请求,将资源 A 相关的信息告诉服务器,问问服务器本地的资源 A 还能不能使用,如果能使用(状态码 304),浏览器直接使用本地资源;否则服务器会返回一份完整的资源 A 。

四种缓存策略

在这里插入图片描述
如果服务器在头部中配置了缓存策略,那么浏览器就会自动执行对应的逻辑了。

Expires

Expires: Wed, 11 May 2018 07:20:00 GMT

这是来自 HTTP 1.0 的头部内容,表示资源的有效期。在用户对已缓存资源发起第二次请求时,浏览器会将 Expires 对应的时间与本地时间比对。如果还没到有效时间,则直接使用本地缓存,否则向服务器发起请求。

Cache-Control

在这里插入图片描述

  • Cache-Control: no-cache —— 必须先与代理服务器确认是否更改,然后再决定使用缓存还是请求,类似于协商缓存
  • Cache-Control: no-store —— 禁止使用缓存,不允许将资源缓存到本地
  • Cache-Control: public —— 可以被用户缓存(多用户共享)
  • Cache-Control: private —— 私有缓存,资源只能被终端浏览器缓存,不允许终端缓存服务器进行缓存。
  • Cache-Control: max-age=31536000 —— 资源的有效期。
  • Cache-Control: max-age=3600 —— 覆盖 max-ageExpires 头,但是仅仅适用于共享缓存。
  • Cache-Control: must-revalidate —— 使重新生效。意味着缓存在考虑使用一个陈旧的资源时,必须先验证他的状态,已过期的缓存将不被使用。

ETagIf-None-Match

缓存的强校验器(会查看文件的内容)
在这里插入图片描述

ETag

ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
ETag: W/"0815"

ETag 来自响应头,可以理解为资源的指纹。资源变化都会导致 ETag 变化,跟最后修改时间没有关系,ETag 可以保证每一个资源是唯一的。没有明确指定生成 ETag 值的方法。通常,使用内容的散列,最后修改时间戳的哈希值,或者简单的使用版本号。

If-None-Match

If-None-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"

在请求资源的时候,浏览器会将它放在请求头部。一般来说,它的值,其实就是下载资源时响应头部下发的 ETag

Last-ModifiedIf-Modified-Since

一个缓存的弱校验器(精确度比 ETag 低)。

在这里插入图片描述

Last-Modified

Last-Modified: Wed, 21 Oct 2015 07:28:00 GMT

一个响应头部。 包含源头服务器认定的资源做出修改的日期及时间。 浏览器会将 Last-Modified 与资源绑定在一起。 它通常被用作一个验证器来判断接收到的或者存储的资源是否彼此一致。

If-Modified-Since

If-Modified-Since: Wed, 21 Oct 2015 07:28:00 GMT

一个请求头部。一般用在 GET 请求。 其实就是下载资源时响应头部下发的 Last-Modified

主流搭配

Cache-Control: max-age + expires + last-modified

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值