HTTP 缓存

news/2024/11/14 20:02:59/文章来源:https://www.cnblogs.com/NETYZreall/p/18331638

避免发送 HTTP 请求的方法就是通过缓存技术,HTTP 设计者早在之前就考虑到了这点,因此 HTTP 协议的头部有不少是针对缓存的字段。HTTP 缓存有两种实现方式,分别是强制缓存和协商缓存。

强制缓存
只要浏览器判断缓存没有过期,则直接使用浏览器的本地缓存,决定是否使用缓存的主动性在于浏览器这边。

强缓存是利用下面这两个 HTTP 响应头部(Response Header)字段实现的,它们都用来表示资源在客户端缓存的有效期: - Cache-Control, 是一个相对时间; - Expires,是一个绝对时间;

Cache-Control 的优先级高于 Expires 。且该字段选项更多更精细。使用时,第一次请求访问的时候就会初始化该字段设置好过期时间,之后再次请求,会先通过请求资源的时间与 Cache-Control 中设置的过期时间大小,来计算出该资源是否过期,同时会更新 Cache-Control。

协商缓存
某些请求的响应码是 304,这个是告诉浏览器可以使用本地缓存的资源,通常这种通过服务端告知客户端是否可以使用缓存的方式被称为协商缓存。

可以基于两种头部来实现。

第一种:可以基于两种头部来实现。

第一种:请求头部中的 If-Modified-Since 字段与响应头部中的 Last-Modified 字段实现,这两个字段的意思是: - 响应头部中的 Last-Modified:标示这个响应资源的最后修改时间; - 请求头部中的 If-Modified-Since:当资源过期了,发现响应头中具有 Last-Modified 声明,则再次发起请求的时候带上 Last-Modified 的时间,服务器收到请求后发现有 If-Modified-Since 则与被请求资源的最后修改时间进行对比(Last-Modified),如果最后修改时间较新(大),说明资源又被改过,则返回最新资源,HTTP 200 OK;如果最后修改时间较旧(小),说明资源无新修改,响应 HTTP 304 走缓存。

第二种:请求头部中的 If-None-Match 字段与响应头部中的 ETag 字段,这两个字段的意思是: - 响应头部中 Etag:唯一标识响应资源; - 请求头部中的 If-None-Match:当资源过期时,浏览器发现响应头里有 Etag,则再次向服务器发起请求时,会将请求头 If-None-Match 值设置为 Etag 的值。服务器收到请求后进行比对,如果资源没有变化返回 304,如果资源变化了返回 200。

第一种实现方式是基于时间实现的,第二种实现方式是基于一个唯一标识实现的;后者会更加靠谱。如果在第一次请求资源的时候,服务端返回的 HTTP 响应头部同时有 Etag 和 Last-Modified 字段,那么客户端再下一次请求的时候,如果带上了 ETag 和 Last-Modified 字段信息给服务端,这时 Etag 的优先级更高。

注意,协商缓存这两个字段都需要配合强制缓存中 Cache-Control 字段来使用,只有在未能命中强制缓存的时候,才能发起带有协商缓存字段的请求。

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

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

相关文章

记一次WPS目录多一级,更新目录之后多出一级没出现在目录中的解决方案

背景:拿着别人写的文章做模板,别人只有三级目录,我多了一级,即我有四级目录 文章写完之后,更新目录,第四级标题没有展示 解决办法:选择引用,目录,自定义目录然后在显示级别处增加一个(点击向上箭头)

JDK工具

jps(Java Process Status):查看正在运行的Java进程 jstat(JVM Statistics Monitoring Tool):查看 JVM 的统计信息 jstat -gc 24388 输出字段:S0C、S1C:Survivor 0 和 Survivor 1 区域的当前容量(KB)S0U、S1U:Survivor 0 和 Survivor 1 区域的已使用空间(KB)EC:Eden…

远程桌面文件传输异常或者取消传输后一直显示正在取消

环境: Window Servers 2008 R2 摘要说明: 本篇文章主要讲述当应用远程桌面进行文件传输时,若因网络等导致进程中断,再次传输时则不能进行文件传输;或者传输时取消传输,然后一直显示正在取消。此时可以通过重启window的rdpclip.exe进程来解决此问题 步骤 1.关闭rdpclip.ex…

机器学习:详解是否要使用端到端的深度学习?(Whether to use end-to-end learning?)

详解是否要使用端到端的深度学习? 假设正在搭建一个机器学习系统,要决定是否使用端对端方法,来看看端到端深度学习的一些优缺点,这样就可以根据一些准则,判断的应用程序是否有希望使用端到端方法。这里是应用端到端学习的一些好处,首先端到端学习真的只是让数据说话。所以…

数独解密小程序

本程序为C#控制台(.Net Framework 目标框架)使用方法在data.csv中填好已有的数据,需要解密的数据空着不填。using System; using System.Diagnostics; using System.IO;namespace 数独解密 {class Program{static void Main(){// 动态确定数独板的大小int size = GetBoardSiz…

数据库索引的简单分类

数据库的索引可以简单的分为四类:主键索引。针对表的主键所创建的索引,这种索引是默认自动创建的,而且只能有一个。唯一索引。避免表中某列的值重复,可以有多个唯一索引,在为某字段限定唯一约束时,会自动创建一个唯一索引。常规索引。一般的用于快速定位检索数据的索引,…

Linux环境下如何升级openssl?

访问官网地址下载最新版本 下载所需版本可访问:历史版本 1.下载OpenSSL源码包 wget https://www.openssl.org/source/old/3.3/openssl-3.3.0.tar.gz 安装必要的依赖 yum install -y openssl-devel perl gcc gcc-c++ zlib 解压源码包 tar -zxvf openssl-3.3.0.tar.gz 进入源码目…

适合证券公司的跨网传输解决方案,了解一下!

证券公司由于其业务特性,涉及大量的敏感财务数据和交易信息,因此通常会在内部实施网络隔离措施。目的是为了保护数据免受未授权访问和网络攻击,确保数据的安全性和保密性,因此急需寻找安全可靠的跨网传输解决方案,实现不同网间数据的安全传输。以下是证券公司可能会采取的…

创建android项目

启动Android Studio,点击New Project因为要使用java语言,模板选择1或2配置如下

如何智能便捷、自动化地进行文件数据采集?

文件数据采集是指从各种源头和渠道收集、整理、清洗、分析和挖掘数据的过程。它是大数据应用的基础,为企业提供全面的决策支持和业务价值。文件数据采集对于不同行业都至关重要,通过有效的文件数据采集,企业可以更好地了解市场动态、优化服务和产品,以及提高运营效率。金融…

2024.7.25模拟赛7

模拟赛 疯狂补题解/改题中。。。 T1 [Permutations & Primes] (未找到)构造一个 \(1-n\) 的序列,使所有区间中 \(mex\) 为质数的最多。感觉题不是很好。结论是:\(1\) 放中间,\(2,3\) 放两边。 打标找规律,感性证明也挺显然的。no codeT2 Spread of Information 首先看道…

如何通过前端表格控件实现自动化报表?

背景 最近伙伴客户的项目经理遇见一个问题,他们在给甲方做自动化报表工具,项目已经基本做好了,但拿给最终甲方,业务人员不太买账,项目经理为此也是天天抓狂,没有想到合适的应对方案。 现阶段主要面临的问题是项目经理和甲方沟通好了需求,就布置了任务,让研发去调研。但…