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

浏览器缓存策略:强缓存和协商缓存

浏览器缓存:其实就是在本地使用的计算机中开辟一个内存区,同时也开辟一个硬盘区,作为数据传输的缓冲区,然后利用这个缓冲区来暂时保护用户以前访问的信息通常浏览器的缓存策略分为两种:强缓存和协商缓存,强缓存和协商缓存都是通过设置http header来实现,从客户端读取资源,区别在于是否发生请求

强缓存

浏览器在浏览器加载资源的时候,先检查一下缓存时间时间是否过期,如果没有那么久直接从缓存直接查找器请求结果,如果缓存时间过期或者不存在,则向服务器发送请求
参数:
1.expires:过期时间,如果浏览器在该时间内再次加载资源,则命中缓存
2.cache-control:值设置为max-age:n(s),单位是s,在这个资源第一次请求并正确返回的时间的n秒内再次加载资源,则命中缓存
如果cache-control设置为no-cache则不使用本地缓存,需要使用协商缓存
cache-contro:no-store:禁止使用浏览器缓存数据,每次都会向服务器发送请求,下载完整数据
⚠️:expires优先级比cache-control要低
强缓存和协商缓存都是通过设置http header来实现,最直接的区别在于是否发送请求,简单来说,强缓存不会,只会根据设置事件判断缓存是否到期,不到期就直接拿缓存,哪怕这个时候内容已经发生变化,协商缓存每次都会向服务器发送请求来判断是否使用缓存,详细来说又一些参数。

协商缓存

不指定缓存的有效时间,而是直接发送请求到服务器判断是否可以继续使用缓存,服务器会根据这个请求的 request header的一些参数来判断,是否命中协商缓存,如果命中只有返回304状态码,并带上新的response header通知浏览器从缓存中读取资源,协商缓存可以解决,当内容发生改变,但是强缓存情况下并不更新的问题。
参数:
必须设置:cache-control:no-cache
1.last-Modify/if-Modify-since:浏览器第一次请求资源的时候,服务器会在返回的header中加上 last-Modify,这是一个时间标识该资源最后一次修改时间(单位为s),当浏览器再次请求该资源,会将服务器返回的last-Modify的值以if-Modify-since字段上送,服务器收到后,会根据资源最后修改时间判断是否命中缓存
该参数有个问题,就是如果在1s内进行改动是察觉不出来的,所以可能会造成问题
Etag/if-None-Match:这个是一个hash值,由服务器生成,当web服务器响应请求时,告诉浏览器当前资源在服务器的唯一标识,再次请求资源并发现有Etag声明,在向web服务器请求时会上送if-None-Match参数里面是Etag值与相应检验串进行比较,决定是否命中协商缓存
当然这种用法解决了上个1s内多次修改察觉不到的问题,但是Etag需要服务器通过计算生成一个hash值,所以会更消耗性能。综上第二种更好一些也更常用。

浏览器缓存过程
1.浏览器第一次请求资源,服务器返回200,浏览器将资源从服务器上下载下来,并把response header及该请求时间一起缓存
2.下一次请求的时候,会先比较当前时间和上次一请求200的时间差,如果没有超过cache-control:max-age设置的时间差,则命中缓存,不发送请求直接直接读取本地缓存,如果过期则向服务器发送header并带有if-None-Match和if-Modify-since的请求
3.服务器收到请求后,会优先根据Etag值判断请求的文件有没有做修改,如果一致则命中缓存,返回304,如果不一致则有改动,返回新的资源文件并带上新的Etag并返回200
4.如果服务器没有收到请求的Etag值,则将if-Modify-since和文件被修改的最后时间比对,一致则命中缓存并返回304,不一致则返回最后一次修改时间 last-Modify和文件并返回200
在这里插入图片描述

相关文章:

浏览器缓存策略:强缓存和协商缓存

浏览器缓存:其实就是在本地使用的计算机中开辟一个内存区,同时也开辟一个硬盘区,作为数据传输的缓冲区,然后利用这个缓冲区来暂时保护用户以前访问的信息通常浏览器的缓存策略分为两种:强缓存和协商缓存,强…...

2023年Chat GPT 应用前景分析

从2022年12月初刚上线至今,不到半年时间ChatGPT月活就超过了1亿用户!可谓火的一塌糊涂,比尔盖茨都称:ChatGPT的历史意义重大,不亚于PC或互联网诞生。以至于ChatGPT官网长期都处于满负荷运转的状态! 由于Ch…...

并发计算公式

常用并发数计算公式:N[(n0.8SP)/(T0.2)]*R 其中: n为系统用户数; S为每个用户发生的业务笔数(QPS); P为每笔业务所需要访问服务器的时间,单位为秒; T为使用业务的时间,单…...

“华为杯”研究生数学建模竞赛2020年-【华为杯】E题:能见度估计与预测(附获奖论文及python代码实现)

​​​​​​​ 目录 摘 要: 一、问题背景与问题重述 1.1 问题背景 1.2 问题重述...

Arduino学习笔记3

一.RGB三色小灯实验 1.源代码 int rgb_R11;//接到板子上面的PWM口11 R int rgb_G9;//接到板子上面的PWM口9 G int rgb_B10;//接到板子上面的PWM口10 B void setup() {pinMode(rgb_R,OUTPUT);//设置rgb_R的控制口为输出模式pinMode(rgb_G,OUTPUT);//设置rgb_G的控制口为输出模…...

BPMN2.0 任务-用户任务

“用户任务(user task)”用于对需要人工执行的任务进行建模。当流程执行到达用户任务时,会为指派至该任务的用户或组的任务列表创建一个新任务。 用户任务用左上角有一个小用户图标的标准任务(圆角矩形)表示。 用户任务在XML中如下定义。其中id是必须属性,name是可选属性…...

David Silver Reinforcement Learning -- Markov process

1 Introduction 这个章节介绍关键的理论概念。 马尔科夫过程的作用: 1)马尔科夫过程描述强化学习环境的方法,环境是完全能观测的; 2)几乎所有的RL问题可以转换成MDP的形式; 2 Markov Processes 2.1 Mark…...

项目结束倒数2

今天,解决了,多个点的最短路问题 用的dfs,配上了floyed计算出的广源距离 难点是要记录路线,dfs记录路线就很烦 但是好在结束了,经过无数的测试,确保没啥问题(应该把) 来看看我的代码 void dfs(int b[], int x, int* sum, int last, int sums, int a[], BFS& s, Floyd_A…...

VBA智慧办公9——图例控件教程

如图,利用VBA进行可视化交互界面的设计,在界面中我们用到了label,button,text,title等多个工具,在进行框图效果的逐一实现后可进行相应的操作和效果实现。 VBA(Visual Basic for Applications&a…...

Presto VS Spark

环境配置 5个节点,每个节点10G内存。 测试SQL,每个执行3次,求平均,对比计算性能。 版本信息 Spark:2.3.1Presto: 0.208 10亿量级查询性能对别 Spark: spark-sql> select sex,count(1) from conta…...

为什么我们能判断声音的远近

想象一下,当我们走在路上时,听到了头顶的鸟儿在树梢间的叫声,即使无法透过浓密的树叶看见它,也可以大致知道鸟儿的距离。此时身后传来由远到近自行车铃铛声,我们并不需要回过头去看,便为它让开了道路。这些…...

那些关于DIP器件不得不说的坑

了解什么是DIP DIP就是插件,采用这种封装方式的芯片有两排引脚,可以直接焊在有DIP结构的芯片插座上或焊在有相同焊孔数的焊位中。其特点是可以很方便地实现PCB板的穿孔焊接,和主板有很好的兼容性,但是由于其封装面积和厚度都比较…...

论文笔记:基于U-Net深度学习网络的地震数据断层检测

0 论文简介 论文:基于U-Net深度学习网络的地震数据断层检测 发表:2021年发表在石油地球物理勘探 1 问题分析和主要解决思路 问题:断层智能识别,就是如何利用人工智能技术识别出断层。 解决思路:结合U-N…...

kafka单节点快速搭建

1.搭建使用centos7主机,关闭防火墙和selinux服务 2.创建kafka存放目录 mkdir /etc/kafka 3.从kafka官网下载安装包 我这里下载了3.3.1版本的kafka,放到kafka目录中 下载地址:Apache Kafka 4.解压安装包并更改名称 tar -zxvf /etc/kaf…...

【MySQL】(6)常用函数

文章目录 日期函数获取日期日期计算 字符串函数charsetconcatlengthsubstringreplaceinstrstrcmpltrim, rtrim, trim 数学函数absbin, hexconvceiling, floorrandformatmod 其他函数user() 查询当前用户密码加密md5()password() database() 查看当前数据库ifnull() 日期函数 函…...

Linux学习 Day1

注意: 以下内容均为本人初学阶段学习的内容记录,所以不要指望当成查漏补缺的字典使用。 目录 1. ls指令 2. pwd指令 3. cd指令 4. touch指令 5. mkdir指令(重要) 6. rmdir指令 && rm 指令(重要&#xff…...

Hibernate中的一对多和多对多关系

Hibernate的一对多和多对多 Hibernate是一个优秀的ORM框架,它简化了Java应用程序与关系型数据库之间的数据访问。在Hibernate中,我们可以使用一对多和多对多的关系来处理复杂的数据模型。本文将介绍Hibernate中的一对多和多对多,包括配置和操…...

Linux系统之部署Samba服务

Linux系统之部署Samba服务 一、Samba服务介绍1.Samba服务简介2.NFS和CIFS简介3.Smaba服务相关包4.samba监听端口4.samba相关工具及命令 二、环境规划介绍1.环境规划2.本次实践介绍 三、Samba服务端配置1.检查yum仓库2.安装smaba相关软件包3.创建共享目录4.设置共享目录权限5.新…...

回顾产业互联网的发展历程,技术的支撑是必不可少的

从以新零售、全真互联网为代表的产业互联网的概念诞生的那一天开始,互联网的玩家们就一直都在寻找着它们的下一站。尽管在这个过程当中,遭遇到了很多的困难,走过了很多的弯路,但是,产业互联网的大方向,却始…...

关于gas费优化问题

关于gas费优化问题 首先我们先来看一下这段代码 // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract GasGolf{uint public total;//[1,2,3,4,5,100]function sum(uint[] memory nums) external{for(uint i 0;i<nums.length;i1){bool isEven nums[i] % 2…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 &#xff08;一&#xff09;引用计数法 &#xff08;二&#xff09;可达性分析算法 二、垃圾回收算法 &#xff08;一&#xff09;标记清除 &#xff08;二&#xff09;标记整理 &#xff08;三&#xff09;复制 &#xff08;四&#xff…...