当前位置:网站首页>计算机网络 | 03.[HTTP篇] HTTP缓存技术
计算机网络 | 03.[HTTP篇] HTTP缓存技术
2022-08-08 06:26:00 【xyx-Eshang】
文章目录
1.HTTP缓存技术
对于一些具有重复性的 HTTP 请求,比如每次请求得到的数据都一样的,我们可以把这对「请求-响应」的数据都缓存在本地,那么下次就直接读取本地的数据,不必在通过网络获取服务器的响应了,这样的话 HTTP/1.1 的性能肯定肉眼可见的提升。
所以,避免发送 HTTP 请求的方法就是通过缓存技术,HTTP 设计者早在之前就考虑到了这点,因此 HTTP 协议的头部有不少是针对缓存的字段。
HTTP 缓存有两种实现方式,分别是强缓存和协商缓存。
浏览器会将需要缓存的资源以「请求 : 响应」这样的KV对格式缓存在本地。当浏览器尝试发起请求访问资源之前,会先根据URL和请求头在本地尝试命中缓存。
- 若成功命中缓存,则不再发起HTTP请求,直接使用本地缓存;
- 若未能命中缓存,则重新发起请求,并根据不同的缓存策略作出不同的行动。
协商缓存 更加常用,而使用协商缓存时,If-None-Match / Etag 这对请求头 / 响应头更为常用。
1. 强缓存策略与协商缓存策略流程概述
| 缓存类型 | 获取资源形式 | 状态码 | 是否发送请求到服务器 |
|---|---|---|---|
| 强缓存 | 从缓存取 | 200(from disk cache) | 否,直接从缓存取 |
| 协商缓存 | 从缓存取 | 304(not modified) | 是,通过服务器来告知缓存是否可用 |
1.1. 强缓存策略流程
若缓存已过期,浏览器重新发起请求,强制服务器将最新的资源放入响应body并返回。
- 首次获取服务器某资源时,浏览器发起请求,并将响应中的资源缓存在本地;
- 再次获取服务器某资源时,浏览器优先在本地搜索缓存:
- 若缓存未过期,使用本地缓存中的资源,此时状态码可能为 “200(from disk cache)”;
- 若缓存已过期,重新发起请求,服务器将最新的资源返回,此时的状态码为 “200 OK”,浏览器将重新进行缓存。
1.2. 协商缓存策略流程
若缓存已过期,浏览器重新发起请求,与服务器协商是否应继续使用本地缓存。
- 首次获取服务器某资源时,浏览器发起请求,并将响应中的资源缓存在本地(会比强缓存多一个响应头);
- 再次湖区服务器某资源时,浏览器优先在本地搜索缓存:
- 若缓存未过期,使用本地缓存中的资源,此时的状态码可能为 “200(from disk cache)”(与强缓存一致);
- 若资源已过期,重新发起请求(将先前响应头中的数据放入请求头),询问资源是否被修改:
- 若服务器判断资源未被修改,则响应体中无数据,浏览器继续使用缓存,状态码为 “304(Not Modified)”;
- 若服务器判断资源已被修改,则在响应体中返回新的资源,此时的状态码为 “200 OK”,浏览器将重新进行缓存。
2. 强缓存与协商缓存涉及的头部字段
2.1. 强缓存
强缓存使用 Cache-Control 作为响应头用以控制资源的缓存方式,当其值以如下方式设置时:
Cache-Control: max-age=3600
表示该资源将在3600s后被浏览器判定为过期。
2.2. 协商缓存
协商缓存在使用 Cache-Control 的基础上,还通过其他的字段来协同控制(Etag更为常用):
[If-None-Match / Etag] 当浏览器从服务器获取资源时,响应头中会携带 Etag 字段,该字段的值(记为 x )被用以唯一标识某个资源。当该资源被判定过期,浏览器将以如下方式设置请求头,发起请求以询问资源是否未被修改(是否仍然可用):
If-None-Match: x // x 为该资源的Etag值[If-Modified-Since / Last-Modified] 与上述类似,响应头中有 Last-Modified 字段,值为该资源最近修改的时间(记为 t ),当资源被判定过期,以如下请求头发起请求询问资源是否未被修改:
If-Modified-Since: t // t 为该资源最近修改的时间
3.完整流程

参考文章
边栏推荐
猜你喜欢
随机推荐
bp神经网络预测模型原理,神经网络模型怎么预测
P02 线程的用途
深度神经网络主要模型,深度神经网络预测模型
【图形学】四元数(二)
Error日志 ERROR: Failed building wheel for jsonnet
ResNet网络结构详解、完整代码实现
Unity object color gradient effect (judgment logic implementation)
文件IO实现图片的加密操作
[Unity] C#使用委托事件与字典实现unity消息中心(观察者模式)
神经网络预测值几乎一样,神经网络为什么能预测
Unity_常用数据分析总结:折线图、条形图(柱状图)、扇形图(饼状图)、雷达图(属性图)
编程更改镜像总结
Double week leetcode 84th game
rhcsa第二天
[Unity] 自定义日志系统 解决Unity Log的痛点
【图形学】12 UnityShader语法入门
【图形学】13 UnityShader语义(一)
acwing 63rd weekly match【2022.08.06】
虚拟机克隆 快照 迁移 删除
tcpdump进行ARP抓包









