浏览器缓存

浏览器缓存是指用户在访问web页面时,将一些静态资源(js,css,图片)缓存到本地硬盘(大:1T)或内存(8G,16G)中,当下次访问页面时,不用向服务端发送请求请求资源,直接从本地加载资源,可以提高用户体验

分类:强缓存和协商缓存

一、强缓存:是指用户第一次请求资源成功后,会将响应头字段中的cache-control和expires字段缓存到本地内存中,以便下次直接加载而不是重新向服务端发送请求;

(1)expries表示资源的过期时间,即在该时间前,浏览器可以使用缓存的资源(需要注意expries有一个弊端,就是expries返回的是服务端时间,所有服务端时间和客户端时间有可能不一致,所以会影响命中缓存的结果)

Expires 是一个日期/时间字符串   Expires: Wed, 13 Jan 2024 14:00:00 GMT  

(2)cache-control是一个控制http的字头段包含多个属性

max-age:指定资源被缓存的最长时间,单位为秒。例如:Cache-Control: max-age=3600 表示资源可以被缓存 1 小时。
no-cache:表示缓存需要先和服务端确认资源是否发生了变化(协商缓存来验证),而不是不经过验证直接使用缓存。:no-cache没有强缓存,但会有协商缓存
no-store:表示禁止缓存该资源。每次获取资源都是存服务端获取.

如果浏览器访问的资源处于强缓存期内,就不会向服务器发送请求,而是直接从本地加载。

注意:当 Expires 字段和 Cache-Control 字段同时存在时,Cache-Control 字段优先级更高,即 max-age 指令的值会覆盖 Expires 的设置。如果服务器返回的响应头中既没有 Expires 字段也没有 Cache-Control 字段,那么缓存时间由浏览器自己决定,默认情况下可能会使用一些启发式算法来估计缓存时间

二、协商缓存:当我们命中强制缓存时,不需要协商缓存(未过期或者no-store都不需要协商缓存);

使用协商缓存需要有两个条件:max-age过期了&&no-cache;使用协商缓存时,会向服务端发送一个请求,如果结果没有变化返回304,变化了则返回新的响应,新的响应包含两个字段:

(1)last-modified(最后修改时间);当再次向服务端发送请求时会将字段last-modified的值带过去与服务端最后一次的修改时间对比,如果相等说明没有修改,返回304,如果不相等返回新的响应;(有一个弊端,last-modified最后修改时间只能精确到秒,但1s内被修改了a-b-c3次时,有可能第一次拿回去的结果a,第二次发起请求将last-modified带过去后,时间一致都是同1s,所以不会拿到新的响应结果c)

(2)ETag(是一个字符串表示唯一标识),每修改一次ETag便会变化,所以ETag更加精确;

同时ETag优先级比last-modified高

总结:强缓存和协商缓存在缓存命中时都是使用本地缓存副本,只不过强缓存和协商缓存命中的条件不同,(强缓存是Expries未过期或者cache-control:max-age未过期),(协商缓存是cache-control:max-age过期&&no-cache时需要向服务端发送请求,根据服务端的响应结果来判断是否命中缓存,304则命中,否则返回新的响应,响应中带有ETag标识和last-modified最后修改时间);强缓存和协商缓存没命中时都会向服务端发送请求;一般情况下需要二者配合使用;

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

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

相关文章

研究领域知名课题组调研

Visual SLAM: reference: [connect paper]{https://www.connectedpapers.com/}https://zhuanlan.zhihu.com/p/130530891 德国慕尼黑工业大学计算机视觉组 研究方向:三维重建、机器人视觉、深度学习、视觉 SLAM 等 实验室主页:https://vision…

MySQL如何存储表情符号?

存储表情符号 默认mysql的字符集是utf8,排序规则为 utf8_general_ci INSERT INTO department (name) VALUES (😄) 在存储表情的时候会报 1366 - Incorrect string value: \xF0\x9F\x98\x84 for column name at row 1, Time: 0.007000s 这时需要修改字符集…

Socket.D v2.3 发布(打通前端与后端)

基于事件和语义消息流的网络应用层协议。 有用户说,“Socket.D 之于 Socket,尤如 Vue 之于 Js、Mvc 之于 Http”。支持 tcp, udp, ws, kcp 传输。 主要特性 基于事件,每个消息都可事件路由所谓语义,通过元信息进行语义描述流关…

git 的安装

git 的安装 在我们开始使用 Git 前,需要将它安装在我们的电脑上。即便已经安装,最好将它升级到最新的版本。 我们可以通过软件包或者其它安装程序来安装,或者下载源码编译安装。 本文只介绍通过在 windows 上安装软件包的方式,其…

大模型实战05——LMDeploy大模型量化部署实践

大模型实战05——LMDeploy大模型量化部署实践 1、大模型部署背景 2、LMDeploy简介 3、动手实践环节——安装、部署、量化 注 笔记内容均为截图 笔记课程视频地址:https://www.bilibili.com/video/BV1iW4y1A77P/?spm_id_from333.788&vd_source2882acf8c823ce…

NLP论文阅读记录 - 2022 | WOS 一种新颖的优化的与语言无关的文本摘要技术

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.前提三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 A Novel Optimized Language-Independent Text Summarization Techni…

TCP服务器和客户端的创建步骤

TCP服务器的实现流程:一、创建套接字(socket函数):通信域选择IPV4网络协议、套接字类型选择流式; int sockfd socket(AF_INET,SOCK_STREAM,0); //通信域选择IPV4、套接字类型选择流式二、填充服务器的网络信息结构体&…

青动CRM-E售后 售后工单CRM系统 erp系统 带前端小程序全开源可二开

应用介绍 一款基于FastAdminThinkPHP和uniapp开发的CRM售后管理系统,旨在助力企业销售售后全流程精细化、数字化管理,主要功能:客户、合同、工单、任务、报价、产品、库存、出纳、收费,适用于:服装鞋帽、化妆品、机械机…

操作系统复习 七、八章

操作系统复习 七、八章 文章目录 操作系统复习 七、八章第七章 内存管理内存管理的基本要求和原理覆盖与交换连续分配管理方式非连续分配管理方式基本分段存储管理方式段页式管理方式补充 第八章 虚拟内存虚拟内存的基本概念请求分页管理方式易混知识点页面置换算法页面分配策略…

Apollo之原理和使用讲解

文章目录 1 Apollo1.1 简介1.1.1 背景1.1.2 简介1.1.3 特点 1.2 基础模型1.3 Apollo 四个维度1.3.1 application1.3.2 environment1.3.3 cluster1.3.4 namespace 1.4 本地缓存1.5 客户端设计1.5.1 客服端拉取原理1.5.2 配置更新推送实现 1.6 总体设计1.7 可用性考虑 2 操作使用…

程序猿的产品思考:2C与2B产品思维的区别

原创/朱季谦 我最早接触到互联网产品的时候,听到最多的,是做产品要有用户思维,即站在用户角度去看待产品。这个先入为主的概念,在很长一段时间里,都被我效作经典。然而也在很长一段时间里,我竟混淆了其中的…

Flink-SQL——动态表 (Dynamic Table)

动态表 (Dynamic Table) 文章目录 动态表 (Dynamic Table)DataStream 上的关系查询动态表 & 连续查询(Continuous Query)在流上定义表连续查询更新和追加查询查询限制 表到流的转换总结 SQL 和关系代数在设计时并未考虑流数据。因此,在关系代数(和 SQL)之间几乎…

ubuntu18.04 TensorRT 部署 yolov5-7.0推理

文章目录 1、环境配置2、推理部分2.1、检测2.2、分类2.3、分割2.4、INT8 量化 1、环境配置 链接: TensorRT cuda环境安装 2、推理部分 下载yolov5对应版本的包 https://github.com/wang-xinyu/tensorrtx/tree/master/yolov5 2.1、检测 1、源码模型下载 git clone -b v7.0 …

您的计算机已被[datastore@cyberfear.com].mkp勒索病毒感染?恢复您的数据的方法在这里!

导言: 在数字化时代,网络安全问题愈发严峻,而[datastorecyberfear.com].mkp [hendersoncock.li].mkp [myersairmail.cc].mkp勒索病毒正是其中一个颇具威胁的恶意软件。本章将深入剖析[datastorecyberfear.com].mkp [hendersoncock.li].mkp […

C# 导出EXCEL 和 导入

使用winfrom简单做个界面 选择导出路径 XLSX起名字 打开导出是XLSX文件 // 创建Excel应用程序对象Excel.Application excelApp new Excel.Application();excelApp.Visible false;// 创建工作簿Excel.Workbook workbook excelApp.Workbooks.Add(Type.Missing);Excel.Works…

如何优化Uniapp应用程序的性能?

优化Uniapp应用程序的性能可以从以下几个方面进行优化: 减少页面加载时间:避免页面过多和过大的组件,减少不必要的资源加载。可以使用懒加载的方式,根据用户的实际需求来加载页面和组件。 节流和防抖:对于频繁触发事件…

F-score 和 Dice Loss 原理及代码

文章目录 1. F-score1. 1 原理1. 2 代码2. Dice Loss2.1 原理2.2 代码 通过看开源图像语义分割库的源码,发现它对 Dice Loss 的实现方式,是直接调用 F-score 函数,换言之,Dice Loss 是 F-score的特殊情况。于是就研究了一下这背后…

训练FastestDet(Anchor-Free、参数量仅0.24M),稍改代码使得符合YOLO数据集排布

文章目录 0 参考链接1 准备数据1.1 使用以下代码生成绝对路径的txt文件1.2 在config文件夹下新建一个xxx.names文件 2 配置训练参数3 稍改代码使得符合YOLO数据集排布4 开始训练 0 参考链接 官方的代码:FastestDet 1 准备数据 我已有的数据集排布:&am…

【Fiddler抓包】微信扫码访问链接打不开网页

又来每天进步一点点~~~ 背景:某天发版的时候,手机连接电脑抓包查看用户登录之前的sessionID,由于业务需要,是需要用户登录微信扫码跳转至某一页面的,微信(分身)扫码成功,跳转时打不…

【已解决】fatal: Authentication failed for ‘https://github.com/.../‘

文章目录 异常原因解决方法 异常原因 在 Linux 服务器上使用git push命令,输入用户名和密码之后,总会显示一个报错: fatal: Authentication failed for https://github.com/TianJiaQi-Code/Linux.git/ # 致命:无法通过验证访问起…