1. 概述
Web 缓存(或称 HTTP 缓存)是指将网站内容在一段时间内进行存储,这些内容可以包括 HTML 页面、图片、视频、CSS 文件和 JavaScript 文件等。
本文将介绍 Web 缓存的基本概念、优势、不同类型的缓存方式,以及如何通过 HTTP 响应头来控制缓存行为。
2. 什么是 Web 缓存?
Web 缓存位于网站的源服务器和客户端之间,用于存储服务器响应的副本。这些保存下来的响应被称为“表示(representation)”,代表了某个时间点的网站版本。当下次有相同 URL 的请求经过时,缓存可以直接返回之前存储的内容,而无需再次请求源服务器:
这种机制会导致两种情况:
- ✅ 缓存命中(Cache Hit):缓存成功响应请求,未访问源服务器
- ❌ 缓存未命中(Cache Miss):缓存无法满足请求,需回源获取内容
3. Web 缓存的优势
Web 缓存带来了诸多好处,主要体现在以下几个方面:
3.1. 页面加载更快
缓存节点通常离用户更近,内容传输路径更短,因此加载速度更快。
3.2. 降低带宽成本
网站托管商通常按源服务器的数据传输量收费。使用缓存后,数据重复利用,减少了源服务器的流量,从而节省成本。
3.3. 减轻服务器负载
大量请求被缓存拦截,源服务器接收到的请求数减少,负载自然降低。
3.4. 提高内容可用性
当源服务器宕机时,缓存中仍可能保留了可用内容,用户仍能访问,提升可用性。
4. Web 缓存的类型
Web 缓存主要分为以下三类:
4.1. 浏览器缓存
这是客户端本地的缓存,属于私有缓存,仅对当前用户有效。用户可以在浏览器设置中启用或禁用缓存:
4.2. 代理缓存
这类缓存是共享缓存,服务于多个用户,通常由大型企业或 ISP 配置。它们是独立的服务器,配置灵活度高于浏览器缓存:
⚠️ 代理缓存不是源服务器或客户端的一部分,因此用户需要手动配置代理,或者使用“透明代理(interception proxies)”自动拦截流量。
4.3. 网关缓存
这类缓存位于源服务器和客户端之间,由网站管理员配置,用于替代源服务器接收用户请求。
CDN(内容分发网络) 就是典型的网关缓存实现。CDN 由分布在全球各地的服务器组成,通过缓存加速内容分发:
5. 如何控制 Web 缓存?
我们可以通过 HTTP 响应头来控制缓存行为,最常用的两个头是:
5.1. Expires 头
Expires
头用于指定响应的有效期,过期后即视为“过时(stale)”:
⚠️ Expires
虽然简单,但存在时区、时间同步等问题,因此推荐使用更灵活的 Cache-Control
。
5.2. Cache-Control 头
Cache-Control
是一个更现代、功能更丰富的响应头,支持多个指令,例如:
Cache-Control: max-age=3600, public, must-revalidate
常见指令包括:
指令 | 说明 |
---|---|
max-age |
响应最大存活时间(秒) |
public |
可被任何缓存存储 |
private |
只能被客户端缓存 |
no-cache |
使用前必须验证有效性 |
no-store |
不允许缓存 |
6. 总结
本文介绍了 Web 缓存的基本原理、优势、类型以及控制方式。需要强调的是:
✅ CDN 是缓存的一种形式,但缓存不等于 CDN
除了 CDN,我们还有浏览器缓存和代理缓存等实现方式。合理利用缓存机制可以显著提升网站性能、降低成本并提高可用性。