http协议中缓存Cache-Control详解

Cache-Control 是一个 HTTP/1.1 协议中的头部字段,用于指定请求和响应遵循的缓存机制。通过这个头部,服务器可以告诉客户端响应可以被缓存多长时间,以及在什么条件下可以被缓存和重新使用。以下是一些常见的 Cache-Control 指令:

基本指令

  • no-cache
    表示响应不应该被缓存,除非得到客户端的确认。这确保了客户端总是通过服务器验证缓存的有效性。使用 no-cache 指令表示客户端可以缓存内容,但在使用之前必须向原始服务器验证缓存的有效性。这意味着每次客户端需要使用缓存时,它都会发送一个请求到服务器,以确认缓存是否仍然是最新的。服务器可以通过返回304状态码(Not Modified)来回应,告诉客户端缓存版本仍然是最新的,客户端可以使用缓存数据。如果资源已经被修改,服务器会发送新的响应数据。no-cache 适用于需要确保用户总是获取到最新数据的场景,但同时又希望建立缓存以优化性能。

  • no-store
    表示响应不应该在任何情况下被缓存,这适用于敏感信息,确保信息不会在本地存储。 与no-cache相比no-store 指令更加严格,它告诉客户端和任何中间缓存(如代理服务器)不应该存储任何版本的响应。也就是说,无论请求条件如何,每次用户请求时都需要从服务器获取完全的新响应数据。no-store 通常用于非常敏感的数据,如个人隐私信息或者银行交易页面,这些页面不应该被存储在任何地方以避免安全风险。

  • public
    表示响应可以被任何缓存(即使是通常是私有的,如浏览器缓存)缓存。

  • private
    指的是响应是私有的,例如,它只适用于单个用户,只能被用户的浏览器缓存。

  • max-age=秒
    指定一个时间段,在这段时间内,响应被认为是新鲜的。此时间从响应生成开始计算。

可选指令

  • s-maxage=秒
    类似于 max-age,但这是专门为共享缓存(如 CDN)设置的。

  • must-revalidate
    当缓存过期时,缓存必须向服务器验证缓存响应的有效性,即使用户操作是离线的。

  • proxy-revalidate
    must-revalidate 类似,但它只适用于共享缓存。

  • immutable
    表示响应体不会随时间而改变,缓存可以无限期地复用它,不需要进行重新验证。

  • no-transform
    不允许缓存修改资源内容,比如不允许压缩图片。

过期指令

  • stale-while-revalidate=秒
    表示客户端愿意接受超出最大新鲜期的响应,在后台静默地更新缓存内容。

  • stale-if-error=秒
    如果服务器发生错误,客户端愿意接受一个过时的响应。

示例

一个响应头可能包含如下的 Cache-Control 指令:

Cache-Control: public, max-age=3600

这意味着此响应可以被任何缓存缓存,并且是新鲜的,在接下来的3600秒(1小时)内。

一个请求头可能包含如下的 Cache-Control 指令:

Cache-Control: no-cache

这意味着客户端要求接收到的每个响应都必须直接来自服务器,或者至少在返回给客户端之前得到服务器的验证。

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

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

相关文章

机器学习——神经网络简单了解

一、神经网络基本概念 神经网络可以分为生物神经网络和人工神经网络 (1)生物神经网络,指的是生物脑内的神经元、突触等构成的神经网络,可以使生物体产生意识,并协助生物体思考、行动和管理各机体活动。 (2)人工神经网络,是目前热门的深度学习的研究…

计算坤是如何工作的

White graces:个人主页 🙉专栏推荐:Java入门知识🙉 🙉 内容推荐:🙉 🐹今日诗词:🐹 ⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏 ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac…

进程、线程、协程与虚拟线程(进程相关)

进程、线程、协程与虚拟线程 这一次我们从头,从最大的先开始说,我们从进程开始,因为内容比较多,所以我们分为几个不同的文章来介绍。先从进程,再从线程,最后介绍协程与虚拟线程。 简介 我们以一张操作系…

ehters.js:provider

ethers.jsV5.4文档 安装ethers npm install ethers5.4.0// 引入 import { ethers } from ethersProviders /** Provider类* Provider类是对以太坊网络连接的抽象,为标准以太坊节点功能提供简洁、一致的接口。 */ const provider new ethers.providers.Web3Provider…

2024年第16届大广赛新命题发布-爱华仕箱包

2024年3月27日,2024年第16届大广赛发布了新的命题,爱华仕箱包命题,自2017年起,爱华仕箱包已连续8年担任全国大学生广告艺术大赛命题单位。 爱华仕现已实现百货、超市、电商、礼品、投标、海外市场6大零售网络的全覆盖&#xff0c…

已解决redis.clients.jedis.exceptions.JedisNoScriptException异常的正确解决方法,亲测有效!!!

已解决redis.clients.jedis.exceptions.JedisNoScriptException异常的正确解决方法,亲测有效!!! 目录 问题分析 报错原因 解决思路 解决方法 总结 博主v:XiaoMing_Java 在使用Redis进行开发时,我们可…

左值引用、右值引用及移动语义

个人主页:Lei宝啊 愿所有美好如期而遇 左值 概念 可以取到地址的值就是左值,并且一般情况下可以修改(const类型左值不可修改)。 左值举例: //左值 int a 0; const int b 1; int* p &a; 右值 概念 不能…

【Golang星辰图】决胜Go语言江湖:六大顶尖库的功能解析与实战攻略

赋能Go开发者:探索与掌握六款核心库的功能与应用场景 前言: 在现代软件开发领域中,Go语言因其实现并发特性的简便性、高性能及简洁高效的程序设计体验而受到广大开发者的推崇。本文旨在为Go语言开发者精选并深入剖析六款广泛应用的核心库&a…

三相四线智能电表直接接入式接线图

大家好,今天我们要聊的是三相四线智能电表的直接接入式接线方式。别担心,我会用简单易懂的语言来解释这个看似复杂的主题。 首先,我们得知道什么是三相四线电表。在我们的生活中,电力供应通常分为单相和三相。三相电,就…

vue 下载图片/视频到浏览器

方法1:直接在当前页面打开图片或者视频 window.location.href url;//借用a标签实现同样效果 const link document.createElement(a) link.href url // 文件地址 link.click(); 方法2:新开一个窗口打开图片或视频 window.open(url); 方法3&#xf…

分页-PageHelper原理以及实时分页-键集分页

一.PageHelper原理 1.使用 PageHelper 是国内非常优秀的一款开源 mybatis 分页插件,它支持常用的主流数据库,例如 Oracle、Mysql、MariaDB、SQLite、Hsqldb 等。 PageHelper 的安装很简单,只需要在 pom.xml 中加入以下依赖即可&#xff1a…

网络类型及数据链路层协议

目录 一、网络的分类 二、数据链路层协议 1、MA网络以太网协议 2、P2P网络 3、HDLC ---高级数据链路控制协议 HDLC地址借用 三、PPP协议 1、PPP协议的优点 2、PPP数据帧封装结构 3、PPP会话的搭建 4、LCP建立——链路建立阶段 4.1协商阶段 4.2认证阶段 4.3 PAP---密…

深入聊聊企业数字化转型这个事儿

01 什么是数字化? 聊数字化,就不得不聊聊信息化、智能化。佛性的说:信息化是数字化的前世,智能化是数字化的来生!我习惯用一个结构化的图形来表示事物之间的关系,信息化、数字化、智能化的关系如下&#…

尤大大正式官宣推出VitePress 1.0

VitePress 在现代Web开发领域,构建快速、响应式的文档网站是开发者经常面临的任务之一。VitePress应运而生,它结合了Vue.js和Vite的强大功能,为开发者提供了一个简单易用的静态站点生成器。Vue.js作为一种流行的前端框架,以其简洁…

网络安全:Kali Linux 进行SQL注入与XSS漏洞利用

目录 一、实验 1.环境 2.Kali Linux 进行SQL注入 3.Kali Linux 进行XSS漏洞利用 二、问题 1.XSS分类 2.如何修改beef-xss的密码 3.beef-xss 服务如何管理 4.运行beef报错 5.beef 命令的颜色有哪些区别 6.owasp-top-10 有哪些变化 一、实验 1.环境 (1&a…

30---SDRAM电路设计

视频链接 SDRAM电路设计01_哔哩哔哩_bilibili SDRAM电路设计 1、SDRAM简介 SDRAM:Synchronous Dynamic Random Access Memory,同步动态随机存储器。 同步是指其时钟频率和CPU前端总线的系统时钟相同,并且内部命令的发送与数据的传输都以…

如何避免SQL注入攻击?

🐓序言 当涉及到数据库操作时,防止SQL注入攻击至关重要。SQL注入是一种常见的网络安全威胁,攻击者通过在用户输入中插入恶意的SQL代码,从而可以执行未经授权的数据库操作。 🐓避免方式 使用参数化查询 使用参数化查询…

【漏洞复现】用友U8 login2.RegisterServlet接口处存在SQL注入漏洞

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

MyBatis3源码深度解析(二十五)级联映射与关联查询(二)级联映射的实现原理

文章目录 前言10.2 MyBatis级联映射的实现原理10.2.1 ResultMap详解10.2.2 ResultMap解析过程10.2.3 级联映射的实现原理10.2.3.1 handleRowValuesForSimpleResultMap()10.2.3.2 handleRowValuesForNestedResultMap() 前言 上一节【MyBatis3源码深度解析(二十四)级联映射与关联…

卸载cuda

cd /usr/local/cuda-xx.x/bin/ sudo ./cuda-uninstaller sudo rm -rf /usr/local/cuda-xx.x 不行就 彻底清理CUDA安装(多版本一起清除)_cuda卸载干净-CSDN博客 还得 sudo apt-get --purge remove "cuda*" sudo apt-get --purge remove "*nvidia*"