游览器缓存讲解

浏览器缓存是指浏览器在本地存储已经请求过的资源的一种机制,以便在将来的请求中能够更快地获取这些资源,减少对服务器的请求,提高页面加载速度。浏览器缓存主要涉及到两个方面:缓存控制和缓存位置。

缓存控制

Expires 头:

作用: 通过 Expires 头指定资源的过期时间,即资源在客户端缓存的有效期。

示例: Expires: Tue, 10 Nov 2023 12:00:00 GMT

Cache-Control 头:

作用: 提供更灵活的缓存控制,包括 public(可以被任何中间缓存和终端缓存)、private(只能被终端缓存)、no-cache(需要先验证是否过期)、max-age(指定缓存的最大有效时间)等。

示例: Cache-Control: max-age=3600, public

Last-Modified 头:

作用: 指定资源最后一次修改的时间。

示例: Last-Modified: Tue, 01 Nov 2022 08:00:00 GMT

If-Modified-Since 头:

作用: 客户端发送该头,用于条件性地请求服务器,仅在资源在指定时间后被修改时才会返回资源内容。

示例: If-Modified-Since: Tue, 01 Nov 2022 08:00:00 GMT

ETag 头:

作用: 提供一个唯一的标识符,当资源被修改时,ETag 会发生变化。

示例: ETag: “abc123”

If-None-Match 头:

作用: 客户端发送该头,用于条件性地请求服务器,仅在资源的 ETag 值与指定的值不匹配时才返回资源内容。

示例: If-None-Match: “abc123”

缓存位置

Memory Cache(内存缓存):

缓存在内存中,读取速度快,但容量较小,仅在浏览器打开时有效。
Disk Cache(磁盘缓存):

缓存在磁盘中,容量相对较大,可以在浏览器关闭后依然有效。
Service Worker Cache(Service Worker 缓存):

使用 Service Worker 技术,可以在离线状态下提供缓存服务,用于构建离线应用。
Push Cache:

用于存储通过 HTTP/2 服务器推送而来的资源。

缓存的流程

首次请求:

浏览器向服务器请求资源。
服务器响应:

服务器返回资源,并在响应头中设置相应的缓存控制信息。
浏览器缓存:

浏览器将资源保存在缓存中,同时记录缓存控制信息。
再次请求:

如果资源没有过期,浏览器直接从缓存中读取资源,不再请求服务器。
条件性请求:

如果资源过期或被修改,浏览器通过条件性请求(如 If-Modified-Since 或 If-None-Match)向服务器验证是否需要获取新的资源。
更新缓存:

如果服务器返回新的资源,浏览器将新的资源存储在缓存中,更新缓存控制信息。
通过合理设置缓存控制头,开发者可以更好地控制客户端缓存的行为,从而提升用户体验和加速页面加载。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/215300.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

acwing算法基础之数学知识--求卡特兰数

目录 1 基础知识2 模板3 工程化 1 基础知识 题目:给定n个0和n个1,它们将按照某种顺序排成长度为2n的序列,求它们能排成的所有序列中,能够满足任意前缀序列中0的个数都不少于1的个数的序列有多少个? 输出的答案对 1 0 …

键入网址到网页显示,期间发生了什么?

文章目录 键入网址到网页显示,期间发生了什么?1. HTTP2. 真实地址查询 —— DNS3. 指南好帮手 —— 协议栈4. 可靠传输 —— TCP5. 远程定位 —— IP6. 两点传输 —— MAC7. 出口 —— 网卡8. 送别者 —— 交换机9. 出境大门 —— 路由器10. 互相扒皮 —…

98、Text2Room: Extracting Textured 3D Meshes from 2D Text-to-Image Models

简介 github 利用预训练的2D文本到图像模型来合成来自不同姿势的一系列图像。为了将这些输出提升为一致的3D场景表示,将单目深度估计与文本条件下的绘画模型结合起来,提出了一个连续的对齐策略,迭代地融合场景帧与现有的几何形状&#xff0…

Javascript每天一道算法题(十五)——轮转数组_中等(一行解决轮转数组)

文章目录 1、问题2、示例3、解决方法(1)方法1——while遍历(较为复杂,不推荐)(2)方法2(直接截取后插入,推荐)(3)方法3——优化方法2&a…

C++初阶 | [六] 模板初阶

摘要:泛型编程,函数模板,类模板 使用函数重载虽然可以实现,但是有一下几个不好的地方: 重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函…

Qt项目打包发布超详细教程

https://blog.csdn.net/qq_45491628/article/details/129091320

RHCE8 资料整理(八)

RHCE8 资料整理 第 8 篇 容器管理第 27 章 使用podman管理容器27.1 安装及配置podman27.2 镜像管理27.2.1 镜像的命名27.2.2 对镜像重新做标签27.2.3 删除镜像27.2.4 查看镜像的层结构27.2.5 导出和导入镜像 27.3 创建容器27.3.1 创建容器27.3.2 容器的生命周期27.3.3 创建临时…

C#,《小白学程序》第六课:队列(Queue)其二,队列的应用,编写《实时叫号系统》

医院里面常见的《叫号系统》怎么实现的&#xff1f; 1 文本格式 /// <summary> /// 下面定义一个新的队列&#xff0c;用于演示《实时叫号系统》 /// </summary> Queue<Classmate> q2 new Queue<Classmate>(); /// <summary> /// 《小白学程序…

C语言——从终端(键盘)读入 20 个数据到数组中,统计其中正数的个数,并计算这些正数之和

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int i0;int sum0;int count0;int arr[20];printf("输入20个数据&#xff1a;\n");for(i1;i<20;i){scanf("%d",&arr[i]);if(arr[i]>0){count;sumarr[i];}}printf("正…

插件预热 | 且看安全小白如何轻松利用Goby插件快速上分

001 前言 各位师傅们好&#xff0c;首先强调一遍我可没做坏事&#xff0c;我只是想学技术&#xff0c;我有什么坏心思呢 回到正题&#xff0c;作为一个初学者&#xff0c;我想和大家分享一下我是如何利用 Goby 进行刷分的经历。大家都知道&#xff0c;刚开始学习的时候&…

抽象类, 接口, Object类 ---java

目录 一. 抽象类 1.1 抽象类概念 1.2 抽象类语法 1.3 抽象类特性 1.4 抽象类的作用 二. 接口 2.1 接口的概念 2.2 语法规则 2.3 接口的使用 2.4 接口间的继承 2.5 抽象类和接口的区别 三. Object类 3.1 toString() 方法 3.2 对象比较equals()方法 3.3 hash…

【matlab版本的ggplot2】

gramm (complete data visualization toolbox, ggplot2/R-like) 来源&#xff1a;Morel, Pierre. “Gramm: Grammar of Graphics Plotting in Matlab.” The Journal of Open Source Software, vol. 3, no. 23, The Open Journal, Mar. 2018, p. 568, doi:10.21105/joss.00568…