news 2026/4/24 17:47:15

HTTP 缓存详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HTTP 缓存详解

HTTP缓存是提升Web性能的关键技术,通过将资源保存在客户端或代理服务器上,减少重复请求。


核心机制分为强缓存(直接使用本地副本)和协商缓存(需服务器验证),通过Expires、Cache-Control、ETag等头部字段控制。


最佳实践包括:

  • 为静态资源添加哈希指纹实现长缓存;
  • HTML文件设置no-cache确保及时更新;
  • 敏感数据使用no-store避免缓存;

合理配置缓存策略能显著提升加载速度、节省带宽并降低服务器压力。


HTTP缓存详解

HTTP缓存是Web性能优化的核心技术之一,能显著减少网络延迟、节省带宽并降低服务器负载。下面我将从核心概念、工作机制、关键头字段、缓存策略等方面进行详解。


一、核心概念

HTTP缓存的核心思想是:将请求过的资源(如HTML、CSS、JS、图片)保存在客户端(浏览器)或中间的代理服务器上,当再次需要相同资源时,可以直接从本地或代理获取,而无需重新从源服务器下载。

主要好处:

  1. 加快页面加载速度,提升用户体验。

  2. 减少网络流量,为用户节省带宽。

  3. 降低服务器压力,提高服务能力。


二、缓存位置

  1. 私有缓存:通常是浏览器自身的缓存,只为单个用户服务。

  2. 共享缓存:位于客户端和服务器之间,为多个用户服务。

    • 代理缓存:如公司网络中的缓存代理。

    • CDN缓存:内容分发网络中的边缘节点缓存。


三、关键HTTP头部字段

缓存行为主要由HTTP请求和响应的头部字段控制。


1. 强缓存验证字段(无需向服务器发起请求)

浏览器直接判断是否使用本地缓存,不发送请求到服务器。

  • Expires(HTTP/1.0)

    • 值是一个绝对的过期时间(GMT格式)。

    • 缺点:依赖客户端时间,如果时间不同步会导致缓存失效不准。

  • Cache-Control(HTTP/1.1)

    • 优先级高于Expires

    • 常用指令:

      • max-age=:资源的最大存活时间(秒),从请求开始计算。例如max-age=31536000表示一年。

      • public:响应可以被任何对象(客户端、代理服务器)缓存。

      • private:响应只能被单个用户的浏览器缓存,不允许代理服务器缓存。

      • no-cache不是不缓存,而是使用缓存前必须向服务器验证(即进入协商缓存流程)。

      • no-store:真正的不缓存,不存储任何客户端或代理的缓存。用于敏感数据。

      • s-maxage:覆盖max-age,但仅适用于共享缓存(如CDN)。


2. 协商缓存验证字段(需要与服务器通信验证)

当强缓存失效或设置了no-cache时,浏览器会携带验证字段向服务器发起请求。服务器根据这些字段判断资源是否变更。

  • Last-Modified/If-Modified-Since

    • 服务器在响应头中返回Last-Modified,表示资源的最后修改时间。

    • 浏览器再次请求时,在请求头中带上If-Modified-Since,值为之前收到的Last-Modified

    • 服务器比较时间,如果未修改,则返回304 Not Modified(空Body);如果已修改,则返回200 OK和新资源。

    • 缺点:精度到秒,一秒内的修改无法感知;文件可能只是被touch修改了时间但内容未变。

  • ETag/If-None-Match

    • 优先级高于Last-Modified

    • 服务器在响应头中返回ETag,通常是文件内容的哈希值或版本号(如"33a64df551425fcc55e4d42a148795d9f25f89d4")。

    • 浏览器再次请求时,在请求头中带上If-None-Match,值为之前收到的ETag

    • 服务器比较ETag,如果一致则返回304,不一致则返回200和新资源。

    • 优点:能精确感知内容变化。缺点:计算ETag有服务器性能开销。


四、缓存工作流程(核心)

下图清晰地展示了浏览器处理HTTP缓存的完整决策过程:


简单来说,浏览器会优先检查强缓存,如果命中且未过期,则直接使用本地资源(极快)。否则,就会发起请求与服务器进行协商缓存验证,根据资源是否变化来决定是使用本地副本还是下载新资源。


五、常见的缓存策略模式

  1. 永久不变的文件(如打包后的带哈希指纹的app.a1b2c3.js

    Cache-Control: public, max-age=31536000, immutable
    • 设置长缓存(一年),immutable告诉浏览器即使用户刷新页面,也无需验证直接使用缓存。

  2. 经常变动的文件(如index.html

    Cache-Control: no-cache
    • max-age=0, must-revalidate

    • 每次都向服务器验证,确保获取最新的页面骨架。

  3. 用户隐私或敏感数据

    Cache-Control: private, no-cache
    • no-store(更严格)。

  4. 静态资源(无指纹)(如common.css

    Cache-Control: public, max-age=86400 ETag: "xyz123"
    • 设置一个较短的缓存时间(一天),配合ETag进行验证。


六、实践技巧与注意事项

  • 哈希指纹:为静态资源文件名添加内容哈希(如style.a1b2c3.css),这样一旦文件内容改变,文件名就变,相当于强制下载新文件。这是实现“长缓存”的最佳实践。

  • CDN缓存:注意Cache-Control头也会影响CDN行为。通常CDN会尊重源站的缓存头。

  • 用户行为影响

    • 正常打开:遵循上述缓存机制。

    • 回车刷新/跳转:浏览器会进行协商缓存验证。

    • 强制刷新(Ctrl+F5):浏览器会忽略所有缓存,请求头带上Cache-Control: no-cachePragma: no-cache,直接从服务器拉取。

    • 禁用缓存(开发者工具):所有请求都会绕过缓存。

  • Vary:用于告知缓存服务器,该资源的内容会根据某些请求头(如User-Agent,Accept-Encoding)的不同而改变。缓存服务器在决定是否使用缓存副本时,必须将这些请求头的值也作为判断依据。


总结

最佳实践组合:

  1. HTML文件:使用no-cache或较短的max-age,确保能及时更新。

  2. 带哈希的静态资源(CSS, JS, 图片):使用Cache-Control: max-age=31536000, immutable进行长缓存。

  3. API接口数据:通常使用Cache-Control: no-storeprivate, max-age=0,避免敏感数据被缓存。对于公开数据,可适当使用max-ageETag


理解并合理配置HTTP缓存,是构建高性能Web应用不可或缺的一环。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 13:45:31

Open-AutoGLM开源框架部署实战(从环境配置到运行验证)

第一章:Open-AutoGLM开源源码部署教程Open-AutoGLM 是一个基于 AutoGLM 架构的开源项目,旨在提供轻量级、可扩展的大语言模型推理与微调能力。该项目支持本地化部署,适用于科研实验与企业私有化场景。环境准备 部署前需确保系统满足以下基础环…

作者头像 李华
网站建设 2026/4/23 17:12:40

一文读懂反向海淘:适用人群 + 核心优势 + 避坑指南

反向海淘,简单来说就是海外消费者通过代购、跨境平台等渠道购买中国商品,再经国际物流送达手中的购物模式。随着中国供应链的成熟和跨境电商的发展,这种 “从中国买全球” 的方式逐渐成为潮流,既满足了多样化需求,也重…

作者头像 李华
网站建设 2026/4/23 13:00:21

揭秘Open-AutoGLM源码部署难点:5步实现本地AI模型快速上线

第一章:揭秘Open-AutoGLM项目背景与核心价值Open-AutoGLM 是一个开源的自动化自然语言处理框架,专注于增强大语言模型在任务编排、工具调用与多步推理中的表现。该项目基于 GLM 架构构建,通过引入动态工作流引擎和可插拔的工具接口&#xff0…

作者头像 李华
网站建设 2026/4/23 2:57:41

40、电子表单与网站内容管理全解析

电子表单与网站内容管理全解析 1. InfoPath 电子表单应用 1.1 InfoPath 简介 InfoPath 是一款可与 SharePoint 集成的应用程序,用于收集和呈现数据。它主要由两个工具组成:InfoPath Forms Designer 用于创建表单模板,扩展名为 .xsn;InfoPath Forms Filler 用于用户填写 …

作者头像 李华
网站建设 2026/4/19 18:07:03

55、深入理解 SharePoint 治理框架的支柱

深入理解 SharePoint 治理框架的支柱 1. SharePoint 用户角色 在 SharePoint 环境中,不同的用户角色承担着不同的职责,共同推动着系统的有效运作。 - SharePoint 开发者 :负责创建可添加到 SharePoint 的自定义解决方案。当使用开箱即用的配置无法轻松完成某些任务,或…

作者头像 李华
网站建设 2026/4/20 14:18:06

40、电商项目建模与需求分析全解析

电商项目建模与需求分析全解析 在电商项目的开发过程中,合理运用各种模型和工具进行需求分析与规划至关重要。下面将详细介绍电商项目中常用的模型及其应用,以及相关的操作指南和示例。 1. 模型对报告表的改进作用 不同的模型在提升报告表质量方面发挥着独特的作用,具体如…

作者头像 李华