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 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> HTTP 的缓存机制 -> 正文阅读

[网络协议]HTTP 的缓存机制

HTTP 的缓存机制

缓存分为两种:强缓存和协商缓存

强缓存

不会向服务器发送请求,直接从缓存中读取资源

Header
  • Expires: response header 里的过期时间,浏览器再次加载资源时,如果在这个过期时间里则命中强缓存

  • Cache-Control:当值设为 max-age=300 时,则代表这个请求正确返回时间的5分钟内再次加载资源,就会命中强缓存

    区别:Expires 是 http1.0 的产物,Cache-Control 是 http 1.1 的产物,两者同时存在的话,Cache-Control 优先级高于 Expires

协商缓存

向服务器发送请求,服务器会根据这个请求的 request header 的一些参数来判断是否命中协商缓存,如果命中,则返回 304 状态码,并带上新的 request header 通知浏览器从缓存中读取资源

Header
  • ETag 和 If-None-Match:

    ETag 是上一次加载资源时,服务器返回的 response header,是对资源的一种唯一标识,只要资源有变化,ETag 就会重新生成

    浏览器在下一次加载资源向服务器发送请求时,会将上一次返回的 ETag 值放到 request header 的 If-None-Match 中,服务器将其与资源文件的 ETag 值做比较,如果相同,则表示资源文件没有发生改变,命中协商缓存,返回 304 状态码

  • Last-Modified 和 If-Modified-Since

    Last-Modified 是资源文件的最后一次更改时间,服务器会在 response header 里返回,同时浏览器会将这个值保存起来,在下一次请求时,放到 request header 里的 If-Modified-Since里

    服务器在接受到后也会做对比,如果相同则命中缓存

    在精确度上,Etag 要优于 Last-Modified ,Last-Modified 的时间单位是秒,如果某个文件在 1 秒内改变了多次,那么他们的 Last-Modified 其实并没有体现出来修改,但是 Etag 每次都会改变确保了精度

    在性能上,Etag 要逊于 Last-Modified,毕竟其只是记录时间,而 Etag 需要服务器计算出响应的 hash 值

    在优先级上,服务器校验优先考虑 Etag。
    所以,两者互补

**共同点:**都是从客户端缓存中读取资源

**区别:**强缓存不会发请求,协商缓存会发请求

浏览器缓存过程

  1. 浏览器第一次加载资源,服务器返回200,浏览器将资源文件从服务器上请求下载下来,并把 response header 及该请求的返回时间一并缓存
  2. 下一次加载资源时,先比较当前时间和上一次返回200时的时间差,如果没有超过 Cache-Control 设置的 max-age,则没有过期,命中强缓存,不发请求直接从本地缓存读取该文件 (如果浏览器不支持 HTTP 1.1,则用 Expires 判断是否过期)
  3. 如果时间过期,服务器则查看 header 里的 If-None-Match (判断hash值)和 If-Modified-Since(判断最后一次修改时间)
  4. 服务器优先根据 Etag 的值判断请求的文件有没有做修改,Etag 一致则没有修改,命中协商缓存,返回 304,如果不一致则有改动,直接返回新的资源文件带上新的 Etag 值并返回 200
  5. 如果服务器收到请求没有 Etag 值,则将 If-Modified-Since 和被请求的最后修改时间做比对,一致则命中协商缓存,返回 304;不一致则返回新的 Last-Modified 和文件资源 并返回200

使用协商缓存主要是为了进一步降低数据传输量,如果数据没有变,就不必要再传一遍

(本文转载自 https://zhuanlan.zhihu.com/p/58685072)

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 21:30:49  更:2022-03-21 21:31:50 
 
开发: 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年11日历 -2024/11/26 5:36:00-

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