HTTP 什么样的响应才会被缓存

news2024/11/26 11:54:47

下面来讨论什么样的响应会被缓存,以及使用好已经缓存好的条件是什么。

缓存分为两步,首先将响应缓存下来,第二步将要发起一个请求的时候检查当前缓存是否可以使用缓存了的响应。

(1) 请求方法可以被缓存理解(不只于 GET 方法,Get方法是肯定可以被缓存的,非get方法也可以被缓存)
(2)响应码可以被缓存理解(404、206 也可以被缓存)
(3)响应与请求的头部没有指明 no-store
(4)响应中至少应含有以下头部中的 1 个或者多个:
  • Expires、max-age、s-maxage、public
  • 当响应中没有明确指示过期时间的头部时,如果响应码非常明确,也可以缓存
(5)如果缓存在代理服务器上
  • 不含有 private(这里是说明不能使用共享缓存,而代理服务器上是可以使用共享缓存的)
  • 不含有 Authorization

其他响应头部


Pragma = 1#pragma-directive
pragma-directive = "no-cache" / extension-pragma
extension-pragma = token [ "=" ( token / quoted-string ) ]
Pragma: no-cache与Cache-Control: no-cache 意义相同

 

 

使用缓存作为当前请求响应的条件


URI 是匹配的

  • URI 作为主要的缓存关键字,当一个 URI 同时对应多份缓存时,选择日期最近的缓存
  • 例如 Nginx 中默认的缓存关键字:proxy_cache_key $scheme$proxy_host$request_uri;
缓存中的响应允许当前请求的方法使用缓存

虽然有了缓存,但是想使用缓存还是有一些条件的,第一个url是需要匹配的,uri是需要作为缓存关键字的,uri会对应多份缓存,这个时候选择日期最近的缓存。

 

 

使用缓存作为当前请求响应的条件


  • 缓存中的响应 Vary 头部指定的头部必须与请求中的头部相匹配:
        Vary = “*” / 1#field-name
              Vary: *意味着一定匹配失败(不是具体的某个头部)
当前请求以及缓存中的响应都不包含 no-cache 头部(Pragma: no-cache 或者 Cache-Control: no-cache)
缓存中的响应必须是以下三者之一:
新鲜的(时间上未过期)
缓存中的响应头部明确告知可以使用过期的响应(如 Cache-Control: max-stale=60)
使用条件请求去服务器端验证请求是否过期,得到 304 响应

 

 

 

Vary 缓存


 客户端去访问,服务器端使用的是gzip编码,这个时候代理服务器上缓存的是gzip编码的内容,如果客户端2来访问的时候,那么它明确指出只能接受br算法来压缩的内容,这个时候虽然有同样的url,同样的url,这样是不可以返回的,第一次返回的响应当中有vary头部,vary头部说明必须根据content-encoding来进行,content-encoding写的是gizp,而client2里面的是br。这个时候必须向源服务器获取到响应。这个时候又存了一份br的响应。

当client3需要br的响应,那么就可以直接使用br的缓存返回client3。

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

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

相关文章

【游戏行业部】反外挂技术的革新:如何有效应对 FPS 外挂的威胁

FPS 游戏外挂现状和泛滥原因 在线多人的 FPS 游戏是实时性要求最高的游戏类型之一。在这种游戏中,玩家的一瞬间判断和反应能力会直接决定胜负。然而,网络延迟和实时加载的问题经常会导致游戏卡顿,这会极大地影响玩家的游戏体验。为了解决这个…

Java-WebSocket

请点击下面工程名称,跳转到代码的仓库页面,将工程 下载下来 Demo Code 里有详细的注释 TestWebSocket

解读Lawyer LLaMA,延申专业领域大模型微调:数据集构建,模型训练

解读Lawyer LLaMA,延申自己领域大模型微调:数据集构建,模型训练 项目地址link 自己领域的大模型微调,实现思路大都和这篇文章是一样的,有的是基于LLaMA,或者有的是基于Chinese-LLaMA,或者是其他开源的大模型&#xf…

对话网心科技李浩| 携“边缘云+AI”之势,深入拓展算力业务场景落地

// 以ChatGPT为代表的人工智能的应用正加快改变人们的生活和工作方式,各种AI的应用引发了新一轮的音视频内容的生产力革命。而伴随着海量的音视频内容的生成,大量的内容会在边侧创建和存储,并在边端完成计算和分发。网心科技持续专注边缘云…

【论文阅读】2020ECCV-DFDNet

Blind Face Restoration via Deep Multi-scale Component Dictionaries 中文:基于深度多尺度分量字典的盲人脸复原 paper: code:https://github.com/csxmli2016/DFDNet 摘要: 近年来,基于参考的人脸恢复方法因其在真…

windows系统修改mysql8配置文件,关闭ssl验证

如何寻找配置文件 我的电脑,右键,管理,服务 找到MySQL8 右键,属性 找到配置文件位置 通常情况下的默认路径是: C:\ProgramData\MySQL\MySQL Server 8.0\my.ini 如何关闭SSL验证 打开 my.ini 配置内容如下&#x…

JAVA基础-集合的工具类Collections

目录 引言 一,Collections工具类的操作方法方法 1,排序操作 2,替换 和 查找操作 二,Collections工具类的使用 2.1,排序操作 2.1.1,集合的逆序 2.1.2,集合的随机排序 2.1.3,集…

第一百一十三天学习记录:C++提高:类模板(黑马教学视频)

类模板 类模板语法 类模板作用&#xff1a; 建立一个通用类&#xff0c;类中的成员 数据类型可以不具体定制&#xff0c;用一个虚拟的类型来代表。 语法&#xff1a; template<typename T> 类解释&#xff1a; template … 声明创建模板 typename … 表面其后面的符号…

SpringCloud nacos 集成 gateway ,实现动态路由

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…

LeetCode刷题笔记 - 859. 亲密字符串

LeetCode刷题笔记 - 859. 亲密字符串 运行结果 题目注意点 bool buddyStrings(char* s, char* goal) {char d 0;char gd 0;int pair 0;int epair 0;char map[256] {0};if (strlen(s) ! strlen(goal)) {return false;}while (*s ! \0) {if (*s ! *goal) {if (d 0) {d *s;…

《Kali渗透基础》09. 漏洞利用、后渗透

kali渗透 1&#xff1a;漏洞基本介绍1.1&#xff1a;漏洞从哪里来1.2&#xff1a;缓冲区溢出1.3&#xff1a;如何发现漏洞 2&#xff1a;漏洞利用2.1&#xff1a;EXP 选择与修改2.2&#xff1a;避免有害的 EXP 3&#xff1a;后渗透阶段3.1&#xff1a;Linux 上传文件3.2&#x…

前后端分离windows本地nginx解决跨域

下载 http://nginx.org/en/download.html 命令 启动Nginx&#xff1a; nginx.exe start 快速停止或关闭Nginx&#xff1a; nginx.exe -s stop 正常停止或关闭Nginx&#xff1a; nginx.exe -s quit 配置文件修改重装载命令&#xff1a; nginx.exe -s reload 强制停用…

六边形架构

六边形架构 微服务系统架构微服务定义微服务系统设计 传统分层架构六边形架构参考资料 微服务系统架构 需求描述做什么的问题&#xff0c;架构描述怎么做的问题(描述组成系统的各部件及其之间的关系) 微服务定义 下面的定义来自周志明老师的 凤凰架构 微服务是一种通过多个小型…

2023牛客暑期多校第一场部分题解

索引 BCDHJKLM B 官方题解说是乱搞题&#xff0c;而我队友实际上也确实乱搞过去了&#xff08; 就是先随便取两个点&#xff0c;有了两个点之后第三个点肯定选离这两个点构成的直线最远的那个&#xff0c;要不然没法包含整个凸多边形。这个过程可以用个三分。 但是确定了第三…

前端(八)——深入探索前端框架中的Diff算法:优化视图更新与性能提升

&#x1f60a;博主&#xff1a;小猫娃来啦 &#x1f60a;文章核心&#xff1a;深入探索前端框架中的Diff算法&#xff1a;优化视图更新与性能提升 文章目录 前端框架中的Diff算法概述vue和react框架的diff算法React的diff算法&#xff1a;Vue的diff算法&#xff1a; Diff算法在…

实训笔记7.20

实训笔记7.20 7.20一、座右铭二、HDFS宕机之后的副本数的问题三、MapReduce的工作流程&#xff08;简单版本&#xff09;四、Hadoop的序列化问题五、MR程序运行中InputFormat类的作用5.1 作用主要有两个5.2 有一个核心实现类--抽象类FileInputFormat 当输入的数据是文件的时候5…

【图像分类】基于LIME的CNN 图像分类研究(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f308;4 Matlab代码实现 &#x1f4a5;1 概述 基于LIME&#xff08;Local Interpretable Model-Agnostic Explanations&#xff09;的CNN图像分类研究是一种用于解释CNN模型的方法。LIME是一…

实用的设计模式08——适配器模式

适配器的单词是Adapter&#xff0c;我们在开发时经常碰到叫做XxxAdapter的类&#xff0c;此时一般就是使用了适配器模式&#xff0c;适配器模式是非常常用&#xff0c;本文就对适配器模式做一个简单的介绍 文章目录 1、真实开发场景的问题引入2、适配器模式讲解2.1 核心类及类图…

2021年全国大学生电子设计竞赛H题——用电器分析识别装置

用电器分析识别装置 一、题目要求二、系统方案三、硬件设计3.1、ATT7022电参数采集模块 一、题目要求 任务 设计并制作一个根据电源线电流的电参量信息分析在用电器类别的装置。该装置具有学习和分析识别两种工作模式。在学习模式下&#xff0c;测试并存储用于识别各单件电器的…

百亿规模京东实时浏览记录系统的设计与实现 | 京东云技术团队

1. 系统介绍 浏览记录系统主要用来记录京东用户的实时浏览记录&#xff0c;并提供实时查询浏览数据的功能。在线用户访问一次商品详情页&#xff0c;浏览记录系统就会记录用户的一条浏览数据&#xff0c;并针对该浏览数据进行商品维度去重等一系列处理并存储。然后用户可以通过…