1. 概述

Web 缓存(或称 HTTP 缓存)是指将网站内容在一段时间内进行存储,这些内容可以包括 HTML 页面、图片、视频、CSS 文件和 JavaScript 文件等。

本文将介绍 Web 缓存的基本概念、优势、不同类型的缓存方式,以及如何通过 HTTP 响应头来控制缓存行为。

2. 什么是 Web 缓存?

Web 缓存位于网站的源服务器和客户端之间,用于存储服务器响应的副本。这些保存下来的响应被称为“表示(representation)”,代表了某个时间点的网站版本。当下次有相同 URL 的请求经过时,缓存可以直接返回之前存储的内容,而无需再次请求源服务器:

Web Cache

这种机制会导致两种情况:

  • 缓存命中(Cache Hit):缓存成功响应请求,未访问源服务器
  • 缓存未命中(Cache Miss):缓存无法满足请求,需回源获取内容

3. Web 缓存的优势

Web 缓存带来了诸多好处,主要体现在以下几个方面:

3.1. 页面加载更快

缓存节点通常离用户更近,内容传输路径更短,因此加载速度更快。

3.2. 降低带宽成本

网站托管商通常按源服务器的数据传输量收费。使用缓存后,数据重复利用,减少了源服务器的流量,从而节省成本。

3.3. 减轻服务器负载

大量请求被缓存拦截,源服务器接收到的请求数减少,负载自然降低。

3.4. 提高内容可用性

当源服务器宕机时,缓存中仍可能保留了可用内容,用户仍能访问,提升可用性。

4. Web 缓存的类型

Web 缓存主要分为以下三类:

4.1. 浏览器缓存

这是客户端本地的缓存,属于私有缓存,仅对当前用户有效。用户可以在浏览器设置中启用或禁用缓存:

Browser Cache

4.2. 代理缓存

这类缓存是共享缓存,服务于多个用户,通常由大型企业或 ISP 配置。它们是独立的服务器,配置灵活度高于浏览器缓存:

Proxy Cache

⚠️ 代理缓存不是源服务器或客户端的一部分,因此用户需要手动配置代理,或者使用“透明代理(interception proxies)”自动拦截流量。

4.3. 网关缓存

这类缓存位于源服务器和客户端之间,由网站管理员配置,用于替代源服务器接收用户请求。

CDN(内容分发网络) 就是典型的网关缓存实现。CDN 由分布在全球各地的服务器组成,通过缓存加速内容分发:

CDN

5. 如何控制 Web 缓存?

我们可以通过 HTTP 响应头来控制缓存行为,最常用的两个头是:

5.1. Expires 头

Expires 头用于指定响应的有效期,过期后即视为“过时(stale)”:

expires

⚠️ 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 不允许缓存

cache-control

6. 总结

本文介绍了 Web 缓存的基本原理、优势、类型以及控制方式。需要强调的是:

CDN 是缓存的一种形式,但缓存不等于 CDN
除了 CDN,我们还有浏览器缓存和代理缓存等实现方式。合理利用缓存机制可以显著提升网站性能、降低成本并提高可用性。


原始标题:Caching and CDNs: What Is the Difference?