首页 > 其他分享 >举例缓存头都有哪些?并说明它们的用处

举例缓存头都有哪些?并说明它们的用处

时间:2024-11-27 09:23:38浏览次数:5  
标签:Control 缓存 浏览器 no Cache Modified 举例 用处

前端开发中,缓存头主要通过 HTTP 响应头设置,用于控制浏览器以及中间代理服务器如何缓存响应内容。以下是一些常见的缓存头及其用处:

强缓存相关的头部:

  • Cache-Control: 这是现代缓存控制的主要机制,功能强大且灵活,可以覆盖其他缓存头(例如 Expires)。一些常用的指令包括:

    • public:响应可被任何缓存存储,包括浏览器和代理服务器。
    • private:响应只能被单个用户缓存,不能被共享缓存(例如代理服务器)存储。
    • no-cache:强制浏览器每次都向服务器验证资源的新鲜度,即使本地有缓存副本。但这并不意味着不缓存,浏览器仍然会缓存资源,只是会先验证。
    • no-store:禁止任何缓存存储响应,每次都必须从服务器获取。
    • max-age=<seconds>:指定资源在缓存中有效的最长时间(以秒为单位)。
    • s-maxage=<seconds>:类似于 max-age,但仅适用于共享缓存(例如代理服务器)。
    • immutable:指示资源在有效期内不会更改,浏览器无需再次检查更新,即使按了刷新按钮。适用于版本化的静态资源。
  • Expires: 指定资源的过期日期和时间。这是一个较旧的缓存控制机制,优先级低于 Cache-Control。如果同时存在 Cache-Control: max-ageExpires,则 max-age 优先。 由于 Expires 使用绝对时间,如果客户端和服务器的时钟不同步,可能会导致问题。

协商缓存相关的头部:

  • Last-Modified: 指定资源的最后修改时间。浏览器在下次请求时会带上 If-Modified-Since 头部,服务器根据这个时间判断资源是否已修改。如果未修改,则返回 304 Not Modified 状态码,浏览器使用本地缓存。

  • ETag: 资源的实体标签,是一个字符串,可以是文件内容的哈希值或版本号。浏览器在下次请求时会带上 If-None-Match 头部,服务器根据 ETag 判断资源是否已修改。如果未修改,则返回 304 Not Modified 状态码,浏览器使用本地缓存。 ETagLast-Modified 更精确,可以检测到文件的细微变化。

  • If-Modified-Since: 请求头,浏览器发送,用于协商缓存,与 Last-Modified 配合使用。

  • If-None-Match: 请求头,浏览器发送,用于协商缓存,与 ETag 配合使用。

其他相关的头部:

  • Pragma: Pragma: no-cache 等同于 Cache-Control: no-cache。这是一个较旧的缓存控制机制,主要用于 HTTP/1.0,在 HTTP/1.1 中,Cache-Control 是首选的缓存控制机制。

  • Vary: 指定哪些请求头字段会影响缓存匹配。例如,Vary: Accept-Encoding 表示缓存会根据 Accept-Encoding 请求头区分不同版本的资源(例如 gzip 压缩版本和未压缩版本)。

缓存控制策略示例:

  • 静态资源(例如图片、CSS、JavaScript 文件): 可以使用强缓存,设置较长的 max-age,例如 Cache-Control: public, max-age=31536000, immutable (一年)。

  • 经常更新的动态内容: 可以使用协商缓存,设置 Last-ModifiedETag

  • 不应缓存的内容(例如包含敏感信息的页面): 可以使用 Cache-Control: no-store, no-cache, must-revalidate

合理地使用缓存头可以显著提高网站的性能和用户体验,减少服务器负载和带宽消耗。 选择合适的缓存策略取决于具体资源的特性和更新频率。

标签:Control,缓存,浏览器,no,Cache,Modified,举例,用处
From: https://www.cnblogs.com/ai888/p/18571510

相关文章

  • 11数据透视表操作举例
    原始数据假设有如下的原始数据:姓名性别年龄归属团队张三1男30安全领域-团队张三2女27测试领域-团队张三3男33安全领域-团队张三4男38智能应用领域-团队张三5男43测试领域-团队张三6男42智能应用领域-团队张三7男25测试领域-团......
  • 自建国际化方案-语言包拆分/按需加载/缓存
    背景国际化多语言(i18n)支持是一个古老的需求,当下企业出海潮的大背景下是一项重要的基础功能。本文将结合自己产品的特点,探讨传统国际化方案的优缺点,并给出适合自己的方案。原理国际化的基本原理是通过映射,将同一个文案,映射成不同国家语言的过程,大部分是直接映射,当然少数......
  • HTTP 缓存技术
    HTTP缓存技术1.缓存概述HTTP缓存技术通过存储已请求资源的副本,减少重复请求、提升响应速度,并节省带宽。缓存可以在客户端、代理服务器、CDN(内容分发网络)等位置进行,能够有效提升Web应用的性能、降低服务器压力和加速用户访问体验。2.缓存的位置和类型2.1浏览器......
  • 举例说明在css3中怎么实现背景裁剪?
    CSS3提供了background-clip属性来实现背景裁剪。background-clip属性指定背景的绘制区域,可以控制背景是否延伸到边框、内边距或内容区域之下。以下是一些例子:1.background-clip:border-box;(默认值)背景延伸到边框外边缘。这是默认行为,背景会覆盖边框区域。div{wid......
  • 请举例说明动态操作DOM的方法有哪些?
    在前端开发中,动态操作DOM(文档对象模型)是JavaScript的核心功能之一。有很多方法可以实现,以下是一些常见示例,涵盖了创建、修改、删除和查找节点等操作:1.创建元素:document.createElement(tagName):创建一个指定标签名的HTML元素。例如,document.createElement('div')创建......
  • 缓存与数据库一致性——延迟双删
    一、延时双删是什么?        延迟双删(DelayDoubleDelete)是一种在数据更新或删除时为了保证数据一致性而采取的策略。这种策略通常用于解决数据在缓存和数据库中不一致的问题。        数据一致性:缓存和数据库一致性问题是指在应用系统中,缓存层(通常是内存中......
  • Caffeine本地缓存和缓存雪崩 缓存击穿 缓存穿透
    初次发布于我的个人文档参考:缓存雪崩,缓存击穿,缓存穿透Caffeine本地缓存在一些场景下可以引入缓存加速,利用redis实现缓存通常是一个不错的选择,但有时为了避免系统变得复杂可以使用本地缓存。Caffeine就是一个高效的本地缓存组件。使用方式如下:1.安装依赖<dependency>......
  • java操作邮箱 - 邮箱发送验证码 -redis分布式缓存 -redisson分布式缓存
    初次发布于我的个人文档参考:java操作163邮箱本文以163邮箱为例,介绍如何用java发送邮箱。1.获取邮箱授权码进入163邮箱-设置-POP3/SMTP/IMAP-开启POP3/SMTP服务记录得到的授权码2.安装依赖//https://mvnrepository.com/artifact/jakarta.activation/jakarta.activation-ap......
  • Linux之CPU缓存
    CPU缓存系统中最快的存储是处理器中的寄存器。但寄存器由于造价比较昂贵,提供的空间也非常有限。因此系统中必须使用存储量大但速度慢的主存(内存)。高速缓存的速度都比主存快。主存的访问时间是8纳秒以上,而缓存的访问时间只有几个CPU时钟周期。在标准的X86平台下,一般有L1L2L3......
  • Unity中GameManager的用处
     UnityGameManager是Unity引擎中的一个常见的设计模式,他用于管理游戏中的全局状态和对象。GameManager可以存储和访问游戏中的全局信息,如玩家分数、生命值、游戏困难等等。此外,GameManager还可以管理游戏对象的创建、销毁和更新,比如敌人、道具等。通过使用GameM......