当前位置: 首页 > news >正文

(十三)强缓存和协商缓存的区别

一、浏览器的缓存策略

浏览器的缓存策略是指浏览器在加载页面时如何使用和管理缓存机制。可以提高网页加载速度,减轻服务器负载,并提供更好的用户体验。常用的缓存策略有两种:一种是发送请求(协商缓存),一种是不需要发送请求(强缓存)。

强缓存:

当浏览器第一次发送请求后,服务器会返回缓存标识,在http1.0使用expires,http/1.1时是cache-control。当浏览器需要使用资源的时候,会去查看文件缓存标识是否过期,如果没有过期就从缓存中获取资源。
expires:规定一个缓存失效时间,过了这个时间,浏览器就需要重新发送请求获取资源。缺陷:浏览器和服务器的时间可能存在误差。
cache-control:规定一个,max-age(有效时长),即服务器返回后资源可以使用,max-age时长。
cache-control值包括:

  • public:表示响应可以被任何对象(包括浏览器和CDN等)缓存
  • private:只能被浏览器缓存,不能被CDN等其他对象缓存
  • no-cache:浏览器使用缓存前必须向服务器发送请求验证
  • no-store:表示不缓存任何响应内容。
    expires和cache-control同时存在浏览器优先使用cache-control。

缓存过期策略:

通过设置响应头中的Expires或Cache-Control字段,可以指定资源的过期时间。当资源过期时,浏览器会重新发送请求到服务器获取最新资源。

协商缓存:

当强缓存失效时,浏览器会发送一个请求到服务器,服务器会根据请求头中携带tag(last-modified。和Etag)与服务器上资源的资源的相关字段进行比较。如果资源未发生变化,则服务器返回304状态码,告诉浏览器可以使用本地缓存。

缓存位置:

  • memory cache:内存缓存是所有缓存运行速度最快的,到那时内存小,保存时间短。
  • disk cache:磁盘缓存,内存较大,效率比内存缓存低。
  • service worker cache:运行于浏览器背后,独立于网页,有自己的生命周期。可操作性高,开发人员可以控制缓存内容,例如控制仅缓存离线内容或者全部缓存。在离线情况还可以去读取缓存的资源。
  • disk cache:http2的内容,需要浏览器和服务器都支持,可以提前与缓存。缓存即将可能用到的数据,服务器不再等待浏览器请求,可以主动通过http2发送数据,极大地提高了网页运行速度性能。

强缓存和协商缓存的区别:

1. 数据来源与交互方式

强缓存:
在缓存的有效期内在 本地缓存 拿数据,即浏览器与服务器之间不会有交互。
协商缓存:
每次请求都会与浏览器进行交互。浏览器会向服务器发送请求,询问资源是否有更新,服务器根据请求中的某些标识(ETag或Last-Modified)来判断资源是否发生变化,并做出响应。

2. 响应状态码:

强缓存:
如果命中强缓存,浏览器会直接读取本地缓存,而不会向服务器发请求。强缓存状态码为200(OK)
协商缓存:
如果资源未发生变化,服务器会返回304(Not MOdidied)状态码,表示浏览器可以根据使用本地缓存的数据。如果有更新,则会返回新的数据。

3. 缓存验证机制

强缓存:
通过 ExpiresCache-Control这两个HTTP请求头信息实现,指定缓存的有效期。在有效期内,浏览器不会向服务器发请求
协商缓存:
通过ETagLast-Modified这两个请求头实现。ETag是一个资源的唯一标识,Last-Modified表示资源最后的修改时间。浏览器在请求时会带上这两个信息,服务器会根据这些信息来判断资源是否发生了变化。

4. 刷新策略

f5刷新网页时,跳过强缓存,进行协商缓存
ctrl+f5刷新页面时会跳过强缓存和协商缓存,直接向服务器请求

总结

缓存类型获取资源形式状态码发送请求到服务器
强缓存从本地缓存200(from cache)否,直接从缓存取
协商缓存从缓存取304(Not Modified)否,通过服务器来告知缓存是否可用

参考:
https://blog.csdn.net/qq_63140280/article/details/131396490?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171263296216800184140665%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=171263296216800184140665&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-2-131396490-null-null.142v100pc_search_result_base1&utm_term=%E6%B5%8F%E8%A7%88%E5%99%A8%E7%BC%93%E5%AD%98%E7%AD%96%E7%95%A5&spm=1018.2226.3001.4187

https://blog.csdn.net/weixin_45822171/article/details/136850590

https://blog.csdn.net/m0_48076809/article/details/119304747

相关文章:

(十三)强缓存和协商缓存的区别

一、浏览器的缓存策略 浏览器的缓存策略是指浏览器在加载页面时如何使用和管理缓存机制。可以提高网页加载速度,减轻服务器负载,并提供更好的用户体验。常用的缓存策略有两种:一种是发送请求(协商缓存),一…...

如何创建Windows下google Chrome便携版?

创建google Chrome便携版教程 准备工作: 1,下载GoogleChromePortable启动器 2,下载谷歌浏览器 3,下载7-ZIP 解压提取器 用7zip解压GoogleChromePortable,得到GoogleChromePortable.exe启动器 解压谷歌浏览器 用7…...

rabbitmq安装rabbitmq-delayed-message-exchange插件

下载地址:Community Plugins | RabbitMQ 上传到rabbitmq安装目录的/plugins目录下 我的是/usr/lcoal/rabbitmq/plugins/ 直接安装 [rootk8s-node1 rabbitmq]# rabbitmq-plugins enable rabbitmq_delayed_message_exchange [rootk8s-node1 rabbitmq]# rabbitmq-pl…...

B02、分析GC日志-6.3

1、相关GC日志参数 -verbose:gc 输出gc日志信息,默认输出到标准输出-XX:PrintGC 输出GC日志。类似:-verbose:gc-XX:PrintGCDetails 在发生垃圾回收时打印内存回收详细的日志, 并在进程退出时输出当前内存各区域分配情况-XX:PrintGCTimeStamp…...

Redis中的集群(二)

节点 集群数据结构 redisClient结构和clusterLink结构的相同和不同之处 redisClient结构和clusterLink结构都有自己的套接字描述符和输入、输出缓冲区,这两个结构的区别在于,redisClient结构中的套接字和缓冲区是用于连接客户端的,而clust…...

UVA12538 Version Controlled IDE 题解 crope

Version Controlled IDE 传送门 题面翻译 维护一种数据结构,资磁三种操作。 1.在p位置插入一个字符串s 2.从p位置开始删除长度为c的字符串 3.输出第v个历史版本中从p位置开始的长度为c的字符串 1 ≤ n ≤ 50000 1 \leq n \leq 50000 1≤n≤50000,所…...

OAuth2.0客户端和服务端Java实现

oauth2 引言 读了《设计模式之美》和《凤凰架构》架构安全篇之后,决定写一个OAuth2.0的认证流程的Demo,也算是一个阶段性的总结,具体原理实现见《凤凰架构》(架构安全设计篇)。 涉及到的源码可以从https://github.com/WeiXiao-Hyy/oauth2获…...

物流自动分拣系统激光雷达漫反射板

早在二十世纪六十年代,激光器的诞生为激光雷达技术的发展奠定了基础。随后,激光雷达技术开始应用于各种领域,包括军事、航空、地理勘测等。然而,在物流自动分拣领域,激光雷达的应用相对较晚。 随着物流行业的快速发展和…...

2024 抖音欢笑中国年(三):编辑器技巧与实践

前言 本次春节活动中,我们大部分场景使用内部的 SAR Creator互动方案来实现。 SAR Creator 是一款基于 TypeScript 的高性能、轻量化的互动解决方案,目前支持了Web和字节内部跨端框架平台,服务于字节内部的各种互动业务,包括但不限…...

Python学习入门(1)——基础语句(二)

14. 迭代器和迭代协议 在Python中,迭代器是支持迭代操作的对象,即它们可以一次返回其成员中的一个。任何实现了 __iter__() 和 __next__() 方法的对象都是迭代器。 class Count:def __init__(self, low, high):self.current lowself.high highdef __i…...

vue 百度地图 使用 vue-baidu-map 进行当前位置定位和范围展示

vue 百度地图 使用 vue-baidu-map 进行当前位置定位和范围展示(考勤打卡) 一、创建百度地图账号,获取秘钥二、 引入插件1、安装vue-baidu-map2、在main.js中引入 三、 简单使用 最近写项目的时候,做到了考勤打卡的模块内容&#x…...

使用idea运行程序,发现控制台的中文出现乱码

修改UTF-8发现没有效果,寻找.idea文件夹的encodings.xml文件,将里面的UTF-8全部变成GBK....

基于javassm实现的大学生兼职信息系统

开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包&…...

O2OA开发平台如何查看数据表结构?

在访问后端api地址,页面最下方有列示平台的各个服务,点击进入可查看具体的表内容 后端api地址: http://{hostIP}/x_program_center/jest/list.html 其中:{hostIP}为中心服务器所在域名或者IP地址 如下图:...

心理测评性格测试矩阵版h5微信抖音QQ快手小程序app开源版开发

心理测评性格测试矩阵版h5微信抖音QQ快手小程序app开源版开发 支持SAAS、支持独立加密、支持独立开源、价格不同。 自带题库数据,后台一键初始,支持自己上传题目 心理测评 微信公众号微信小程序抖音小程序可打包APP 支持单题、跳跃题、计分题、因子题、…...

【蓝桥杯】十六进制转八进制 C++实现

1.题目信息 时间限制&#xff1a;1.0s 内存限制&#xff1a;512.0MB 问题描述 给定n个十六进制正整数&#xff0c;输出它们对应的八进制数。 输入格式 输入的第一行为一个正整数n &#xff08;1<n<10&#xff09;。 接下来n行&#xff0c;每行一个由09、大写字母AF组成…...

明明设置数字居中对齐,为什么excel的数字却不居中?

有时候在excel里&#xff0c;选中数据&#xff0c;设置对齐方式 左右居中&#xff0c;然而&#xff0c;数字却怎么都不居中&#xff0c;为什么呢&#xff1f; 1.按快捷键Ctrl1&#xff0c;打开单元格自定义格式对话框&#xff0c;看到是初始界面是在数字的会计专用&#xff0c;…...

深入解析API技术:原理、实现与应用

在现代软件开发中&#xff0c;API&#xff08;应用程序接口&#xff09;扮演着至关重要的角色。API 允许不同的软件应用程序和系统之间进行通信和数据交换&#xff0c;从而构建出更加高效、灵活和可扩展的软件解决方案。本文将深入解析API技术的原理、实现方法&#xff0c;并附…...

C语言——数组指针变量

一、什么是数组指针 数组指针变量是指向数组的指针&#xff0c;它可以用来遍历数组元素、进行数组操作以及作为函数参数传递数组等操作。在C语言中&#xff0c;数组名本身就是数组的首地址&#xff0c;因此数组指针可以指向数组的首地址。 数组指针变量的基本形式&#xff1a…...

Redis的过期策略与内存淘汰机制原理及实践

Redis作为高性能的键值存储系统&#xff0c;其对数据过期与内存管理的设计直接影响到系统的性能与资源利用率。本文将以生动的比喻、通俗的语言&#xff0c;深入剖析Redis的过期策略与内存淘汰原理&#xff0c;助您全面理解数据在Redis中的生命周期管理艺术。 一、Redis过期策…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一&#xff1a;使用Read()读取文件2.3、方式二&#xff1a;bufio读取文件2.4、方式三&#xff1a;os.ReadFile读取2.5、写…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...

FFmpeg avformat_open_input函数分析

函数内部的总体流程如下&#xff1a; avformat_open_input 精简后的代码如下&#xff1a; int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...

海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》

近日&#xff0c;嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》&#xff0c;海云安高敏捷信创白盒&#xff08;SCAP&#xff09;成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天&#xff0c;网络安全已成为企业生存与发展的核心基石&#xff0c;为了解…...

Windows 下端口占用排查与释放全攻略

Windows 下端口占用排查与释放全攻略​ 在开发和运维过程中&#xff0c;经常会遇到端口被占用的问题&#xff08;如 8080、3306 等常用端口&#xff09;。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口&#xff0c;帮助你高效解决此类问题。​ 一、准…...