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

浏览器缓存

什么是缓存?

当第一次访问网站的时候,比如www.baidu.com,电脑会图片,文件等下载下来,当第二次访问网站的时候,网站就会直接被加载出来.

缓存的好处?

  • 减轻服务器压力,减少请求的放松.
  • 提高性能,在本地打开资源肯定比在服务器上获取要快
  • 减少宽带的消耗,当我们使用缓存时,只会产生很少的网络消耗

**浏览器缓存有俩种方式:**强缓存、协商缓存

浏览器缓存存储的地方:Service Worker、Memory Cache、Disk Cache、push Cache

缓存位置

1.Service Worker

是浏览器背后的独立线程,一般可以作为缓存。使用Service Worker,首先必须是HTTPS协议,因为Service Worker中间涉及到一些请求的拦截,所以必须要用HTTPS来保证安全。

Service Worker和其他浏览器缓存不同,它可以选择缓存那些文件,读取那些文件,并且还有持续性。

2.Memory Cache

是内存中的缓存,主要是当前页面已经下载过的资源,比如页面上已经下好的样式、脚本、图片之类。在内存中读取速度肯定比磁盘中快,内存虽然读取高效,但是持续性很短,随着进程的释放而释放,如果关闭tab页面就会消失。

3.Disk Cache

是硬盘中的缓存,他和Memory Cache相比,读取比内存的要慢,但是什么都能存储到硬盘上。在容量和时效性更好一些。

Disk Cache是浏览器大多会使用的,他会根据HTTP header上的字段来判断那些资源需要被缓存,那些缓存可以不用去请求,那些缓存过期需要重新请求。

如果一旦被硬盘缓存下来,就不会去请求数据,大多数的缓存都在Disk Cache

4.push Cache

是HTTP2中的内容,如果以上三种缓存都不是,就会使用push Cache,它的只会在session(会话)中出现,它的持续性也非常短,随着会话的结束就会被释放。一般在谷歌中,存储的时间也只有5分钟,而push Cache也并非遵从HTTP头中的缓存指令

缓存方式

1.强缓存

强缓存就是当URL访问页面时,不会去请求服务器,而是返回200,拿缓存中的资源进行渲染。

如何去设置强缓存?

当我们第一次进入页面的时候,会向服务器发送请求,通过服务器返回的响应头进行判断是否进行缓存,如果响应头中有 expries 或者 Cache-Control的字段就是强缓存,接着浏览器就将缓存存储在Memory Cache和Disk Cache。

当第二次进行请求,浏览器就会判断参数是否符合,如果符合就返回200状态码,渲染本地资源;否则就会把响应参数存在请求头,判断是否是协商缓存,如果是则返回304状态码,渲染缓存;否则就重新请求。

expries

是HTTP1.0控制页面缓存的字段,值为一个时间戳,服务器会返回到期时间,如果没有到期就从缓存拿数据,如果过期则重新请求

Cache-Control

是HTTP1.1控制页面缓存的字段,它的值有很多,当Cache-Control存在时,Cache-Control的优先级更高。

public:服务器和浏览器都可以缓存privite:只允许浏览器缓存no-store:都不缓存no-cache:可以缓存,但会立即失效max-stale=30  :30s内,即使缓存过期也使用该缓存min-fresh=30  :希望30s内获取最新的响应

pragma

这个是HTTP1.0中禁用网页缓存的字段,其取值为no-cache,和Cache-Control的no-cache效果一样。

2.协商缓存

协商缓存就是当强缓存失效后,会带这缓存标识去向服务器去请求,如果符合就返回304状态码,并且会更新缓存的标识;否则返回200,并重新请求数据。

协商缓存使用俩种HTTP header实现

  • Last-Modified
  • ETag

** Last-Modified**

浏览器发起请求访问目标资源,服务器在返回资源的同时,会在response header中添加 Last-Modified这个header,表示这个资源在服务器上的最后修改时间

浏览器下一次请求这个资源,浏览器检测到有 Last-Modified这个header,于是会添加If-Modified-Since这个header其值就是Last-Modified中的值

服务器再次收到这个资源请求,会根据 If-Modified-Since 中的值与服务器中这个资源的最后修改时间对比

  • 若服务器的资源最后被修改时间不等于于If-Modified-Since中的值的话就会将新的资源发送回来
  • 否则返回 304 状态码

缺点:

  • 如果本地打开缓存文件,即使没有对文件进行修改,但还是会造成 Last-Modified 被修改,服务端不能命中缓存导致发送相同的资源
  • Last-Modified 只能以秒计时,如果在不可感知的时间内修改完成文件,那么服务端会认为资源还是命中了,不会返回正确的资源

因为以上这些弊端,所以在 HTTP / 1.1 出现了 ETag

ETag

Etag是服务器在响应请求时,返回的当前资源文件一个唯一标识(由服务器生成),只要资源有变化,Etag就会重新生成

浏览器在向服务器发送请求时,会将上一次返回的Etag值放到请求头的If-None-Match字段里

服务端比较 If-None-Match 中的值跟目标资源的ETag是否一致

  • 一致,响应状态码为304
  • 不一致,响应状态码为200,并返回新的资源

特点:

  • ETag 优先级比 Last-Modified 高
  • ETag 是服务端通过算法计算得出,需要损耗一定时间

相关文章:

浏览器缓存

什么是缓存? 当第一次访问网站的时候,比如www.baidu.com,电脑会图片,文件等下载下来,当第二次访问网站的时候,网站就会直接被加载出来. 缓存的好处? 减轻服务器压力,减少请求的放松.提高性能,在本地打开资源肯定比在服务器上获取要快减少宽带的消耗,当我们使用缓存时,只会…...

【软考 系统架构设计师】论文范文③ 论数据访问层设计技术及其应用

>>回到总目录<< 文章目录 论数据访问层设计技术及其应用范文摘要正文论数据访问层设计技术及其应用 在信息系统的开发与建设中,分层设计是一种常见的架构设计方法,区分层次的目的是为了实现“高内聚低耦合”的思想。分层设计能有效简化系统复杂性,使设计结构清…...

802.11 MCS 的最低SNR分析

常常看到这样的表格: 那么这个SNR如何而来? 看看RSSI和SNR的关系,它们之间隔了一个noise floor。从表格看得出,这个底噪在-80~-90之间。 而SNR的核心,也有类似的原因,它和BER有关。...

用于C++的对象关系映射库—YB.ORM

1 介绍YB.ORM YB.ORM 旨在简化与关系数据库交互的 C 应用程序的开发。 对象关系映射器(ORM) 通过将数据库表映射到类并将表行映射到应用程序中的对象来工作&#xff0c;这种方法可能不是对每个数据库应用程序都是最佳的&#xff0c;但它被证明在需要复杂逻辑和事务处理的应用程…...

Cesium 100K数据加载 支持弹窗 动态更改位置

前言&#xff1a;今天总结关于point、label、billboard海量数据加载。后续会研究下大量model加载以及大bim(几百G上T)模型记载 海量点加载 弹窗 加载点位时&#xff0c;不加载弹窗。点击点位时在加载弹窗&#xff0c;及有效的减少加载量&#xff0c;优化性能。 const handler …...

MySQL管理表

在创建表时需要提前了解mysql里面的数据类型 常见的数据类型 创建表 创建表方式1&#xff1a; 格式&#xff1a; CREATE TABLE [IF NOT EXISTS] 表名( 字段1, 数据类型 [约束条件] [默认值], 字段2, 数据类型 [约束条件] [默认值], 字段3, 数据类型 [约束条件] [默认值], ………...

【Java 面试合集】打印一个int整数的32位表示

打印一个int整数的32位表示 1. 概述 嗨&#xff0c;大家好【Java 面试合集】又来了&#xff0c;今天给大家分享的主题是打印一个int整数的32位表示. 2. 32位分析 2.1 为什么是32位呢 不知道看到这篇文章的各位是否都知道&#xff0c;一个int类型的表示方式就是32位呢&#x…...

这样在管理后台里实现 403 页面实在是太优雅了

前言403 页面通常表示无权限访问&#xff0c;与 404 页面代表着不同含义。而大部分管理后台框架仅提供了 404 页面的支持&#xff0c;但却忽略了对 403 页面的处理&#xff0c;有的框架虽然也有对 403 页面的处理&#xff0c;但处理效果却不尽人意。那怎么样的 403 页面才是即好…...

c++提高篇——STL常用算法

STL常用算法一、常用遍历算法一、for_each 遍历容器二、transform 搬运容器到另一个容器中二、常用查找算法一、find二、find_if三、adjacent_find四、binary_search五、count六、count_if三、常用排序算法一、sort二、random_shuffle三、 merage四、reverse四、常用拷贝和替换…...

Materials - DistanceField Nodes

以前的相关笔记&#xff0c;归档发布&#xff1b;距离场相关节点&#xff1a;DistanceToNearestSurface节点&#xff1a;求出传入的Position位置到最近的面的距离并输出&#xff0c;在没有Position输入的时候&#xff0c;默认值会直接使用World Position&#xff1a;Position的…...

【ARMv8 编程】ARMv8 指令集介绍

ARMv8 架构中引入的最重要的变化之一是增加了 64 位指令集。该指令集补充了现有的 32 位指令集架构。这种增加提供了对 64 位宽整数寄存器和数据操作的访问&#xff0c;以及使用 64 位长度的内存指针的能力。新指令被称为 A64&#xff0c;以 AArch64 执行状态执行。ARMv8 还包括…...

大数据之Phoenix基本介绍

文章目录前言一、Phoenix简介二、Phoenix入门&#xff08;一&#xff09;创建表语法&#xff08;二&#xff09;查看表信息&#xff08;三&#xff09;删除表&#xff08;四&#xff09;大小写问题前言 #博学谷IT学习技术支持# 上篇文章介绍了Phoenix环境搭建&#xff0c;点击…...

算法leetcode|38. 外观数列(多语言实现)

文章目录38. 外观数列&#xff1a;样例 1&#xff1a;样例 2&#xff1a;提示&#xff1a;分析&#xff1a;题解&#xff1a;rustgocpythonjava38. 外观数列&#xff1a; 给定一个正整数 n &#xff0c;输出外观数列的第 n 项。 「外观数列」是一个整数序列&#xff0c;从数字…...

异步交互的关键——Ajax

文章目录1,Ajax 概述1.1 作用1.2 同步和异步1.3 案例1.3.1 分析1.3.2 后端实现1.3.3 前端实现2&#xff0c;axios2.1 基本使用2.2 快速入门2.2.1 后端实现2.2.2 前端实现2.3 请求方法别名最后说一句1,Ajax 概述 AJAX (Asynchronous JavaScript And XML)&#xff1a;异步的 Jav…...

Android自定义View实现打钩签到动画

效果图实现原理我们看实现的动画效果&#xff0c;其实是分为1. 绘制未选中状态图形&#xff08;圆弧和对号&#xff09;2. 绘制选中状态圆弧的旋转的动画3. 绘制选中状态圆弧向中心收缩铺满动画4. 绘制选中状态对号5. 绘制选中状态下圆的放大回弹动画6. 暴露接口接口回调传递选…...

python+pytest接口自动化(3)-接口测试一般流程及方法

首先我们要明确&#xff0c;通常所接口测试其实就属于功能测试&#xff0c;主要校验接口是否实现预定的功能&#xff0c;虽然有些情况下可能还需要对接口进行性能测试、安全性测试。在学习接口自动化测试之前&#xff0c;我们先来了解手工接口测试怎样进行。URL组成为了更好的理…...

《MySQL学习》 表中随机取记录的方式

一.初始化测试表 创建表 words CREATE TABLE words ( id int(11) NOT NULL AUTO_INCREMENT, word varchar(64) DEFAULT NULL, PRIMARY KEY (id)) ENGINEInnoDB;插入测试数据 create procedure idata()begin declare i int; set i 0; while i<10000 do insert into words…...

功率信号源有什么作用和功能呢

功率信号源是指集信号发生器与功率放大器为一体的电子测量仪器&#xff0c;它具有高电压、大功率的特点&#xff0c;在电子实验室中能够帮助用来驱动压电陶瓷、换能器以及电磁线圈等&#xff0c;可以有效的帮助电子工程师解决驱动负载和放大功率的问题。功率信号源和功率放大器…...

一些cmake error fixed

建完虚拟环境后 运行 pip install . 出现报错&#xff0c;显示svox2安装出错&#xff0c;然后开始进入到svox2中进行手动编译和安装。 1. cmake svox2/csrc pybind11找不到 conda install pybind11用 pip install 在虚拟环境中安装不行&#xff0c;据说会安装到全局下… 2. c…...

CentOS 7安装Docker并使用tomcat测试

文章目录环境准备Docker安装安装tomcat环境准备 CentOS 7以上版本linux内核版本需要在3.10以上&#xff0c;可通过uname -r 查看系统内核。 Docker安装 检查docker安装源 yum list docker yum安装docker &#xff1a; yum install docker.x86_64 启动 docker &#xff1a; s…...

互联网大厂 Java 求职面试实战:音视频场景中的技术挑战

互联网大厂 Java 求职面试实战&#xff1a;音视频场景中的技术挑战在这个互联网飞速发展的时代&#xff0c;越来越多的求职者走进了大厂的面试现场。今天&#xff0c;我们将跟随一位搞笑的程序员燕双非&#xff0c;来看看他在面试中的表现&#xff0c;以及他如何应对各种技术问…...

MATLAB CGCS2000高斯投影坐标转经纬度坐标

坐标系转换这边需要用到mapping toolbox 首先根据原始&#xff08;x,y&#xff09;坐标对应的投影坐标系查询EPSG编号 例如这边CGCS2000 / 3-degree Gauss-Kruger CM 123E的编号就是4450 对应的编号可以https://blog.csdn.net/qq_41441896/article/details/104525296在这篇博…...

SAP ABAP SOAUTH2 配置原理与 OAuth2 四要素落地解析

1. 为什么 SAP ABAP 系统里填个 OAuth2 参数总像在解谜题&#xff1f; 刚接手一个对接钉钉开放平台的 ABAP 项目时&#xff0c;我盯着事务码 SOAUTH2 的配置界面足足看了二十分钟——Client ID、Client Secret、Authorization Endpoint、Token Endpoint、Redirect URI……每个…...

Unity背包系统设计终极指南:ScriptableObject+事件总线+对象池

1. 为什么“背包系统”不是功能模块&#xff0c;而是游戏世界的呼吸节奏 在Unity项目里&#xff0c;我见过太多团队把背包系统当成一个“做完就扔”的中间件&#xff1a;美术给图标、策划填Excel表格、程序写个List 塞进UI面板&#xff0c;跑通基础增删就打上✅。结果呢&#x…...

GESP6级C++考试语法知识(二十五、深度优先搜索(五、DFS终极奥义))

⚔️第五课《DFS终极奥义》——原来算法世界到处都是 DFS&#xff01;&#x1f31f;一、故事开始&#xff1a;算法圣殿1、经过前四课。小骑士 DFS 已经成为了&#xff1a;&#x1f31f;DFS 小勇者&#xff01;2、但是。算法王国最深处。还有一座&#xff1a;&#x1f31f;“dfs…...

软件测试行业还有未来吗?从业者该何去何从?

前几天某软出现了稍具规模的维权活动&#xff0c;据说当事人是测试同行&#xff0c;感觉当前从业环境越来越恶劣了&#xff0c;然后我把各大招聘平台&#xff08;如BOSS直聘、拉勾、智联招聘、猎聘等&#xff09;上“软件测试”相关岗位爬了一遍&#xff0c;并做了深度数据挖掘…...

深度解析vLLM-Ascend技术架构:从分布式并行到算子优化的全栈实践指南

深度解析vLLM-Ascend技术架构&#xff1a;从分布式并行到算子优化的全栈实践指南 【免费下载链接】vllm-ascend Community maintained hardware plugin for vLLM on Ascend 项目地址: https://gitcode.com/gh_mirrors/vl/vllm-ascend vLLM-Ascend作为昇腾硬件上的高性能…...

Ollama迁移到vLLM:本地大模型服务生产化实战指南

1. 项目概述&#xff1a;为什么一个本地大模型服务迁移指南值得写满5000字&#xff1f;“From Local to Production: The Ultimate Ollama to vLLM Migration Guide”——这个标题里藏着三重现实张力&#xff1a;本地开发的便利性、生产环境的严苛性&#xff0c;以及大模型推理…...

魔兽争霸III终极优化指南:5大功能彻底解决现代系统兼容性问题

魔兽争霸III终极优化指南&#xff1a;5大功能彻底解决现代系统兼容性问题 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸III在现代电脑…...

揭秘开源项目的高效实现:QMC音频文件解密技术深度解析

揭秘开源项目的高效实现&#xff1a;QMC音频文件解密技术深度解析 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 你是否曾经遇到过从QQ音乐下载的音频文件无法在其他播放器…...