IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Web缓存原理相关资料的整理 -> 正文阅读

[网络协议]Web缓存原理相关资料的整理

背景

最近在一个项目中针对某个页面进行了专项性能调优(被用户吐槽,不得不优化),中间通过查阅各种资料发现之前对于Web缓存都是纸上谈兵,这次趁这个机会整理一下。

缓存的分类

缓存可以基本分为两类,一类是在浏览器缓存一类是服务器上的缓存,如下图所示:
在这里插入图片描述

  1. 浏览器缓存,强缓存
    Memory cache,内存缓存,关闭tab消失
    Disk cache,根据请求头
    Service Worker,Https的独立线程
    Push cache,HTTP2,其余没有命中,session中
  2. 服务器缓存,协商缓存

浏览器Http请求的基本流程

很多人印象中在浏览器发送请求就是jquery或其他类库一条指令的事,但魔鬼藏在细节中,往往很多问题就出在期中的细节中。这里专门说一下请求的基本过程。

  • 构建请求,这个很明显就是开始的过程。
  • 查找缓存,这个是浏览器查找自身缓存,来确定是否要继续发送缓存,这个缓存与后面将的etags以及last-modified 的header有很大的关系。
  • 准备 IP 地址和端口,根据域名查找真正的地址
  • 等待 TCP 队列,浏览器都有TCP连接数量限制,需要排队
  • 建立 TCP 连接 ,实质的连接
  • 发送 HTTP 请求,发送数据
  • 读取响应,读取请求。

缓存相关的header

etags和If-None-Match

作为缓存的一种强校验器,如果资源请求的响应头里含有ETag, 客户端可以在后续的请求的头中带上 If-None-Match 头来验证缓存。

Last-Modified和f-Modified-Since

Last-Modified 响应头可以作为一种弱校验器。说它弱是因为它只能精确到一秒。如果响应头里含有这个信息,客户端可以在后续的请求中带上 If-Modified-Since 来验证缓存。

示例

该图来自网络
在这里插入图片描述

当向服务端发起缓存校验的请求时,服务端会返回 200 ok表示返回正常的结果或者 304 Not Modified(不返回body)表示浏览器可以使用本地缓存文件。304的响应头也可以同时更新缓存文档的过期时间。

请求的响应

  • 成功响应状态码为:2XX,一般200。不完全的响应: 206,只返回局部的信息。201,创建成功
  • 永久重定向: 301。缓存未改变:304
  • 客户端错误,4XX,未找到资源: 404,禁止权限403,未鉴权401 服务器端错误,5XX

参考资料

  • HTTP 缓存 - HTTP | MDN (mozilla.org)
  • 03 | HTTP请求流程:为什么很多站点第二次打开速度会很快?
  • 用Nginx搭建一个具备缓存功能的反向代理服务(https://time.geekbang.org/course/detail/100020301-65073)
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-11-15 16:11:28  更:2021-11-15 16:13:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年7日历 -2024/7/3 20:49:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码