返回

HTTP 缓存:从入门到精通

前端

HTTP 缓存是一种浏览器用来存储网站资源(如 HTML、CSS 和 JavaScript 文件)的机制,以便在用户再次访问该网站时可以快速加载这些资源。HTTP 缓存可以显著提升网站的性能,并减少服务器的负载。

HTTP 缓存的工作原理

当浏览器第一次访问一个网站时,它会将该网站的资源下载到本地计算机上。当用户再次访问该网站时,浏览器会首先检查本地计算机上是否有这些资源的缓存副本。如果有,浏览器就会直接从本地计算机上加载这些资源,而不需要再向服务器发送请求。

HTTP 缓存的有效性由两个因素决定:

  • Cache-Control 头: Cache-Control 头控制浏览器是否使用缓存资源。
  • ETag 头: ETag 头验证缓存是否可用。

Cache-Control 头

Cache-Control 头是一个 HTTP 请求头,用于控制浏览器是否使用缓存资源。Cache-Control 头的值可以是:

  • max-age=x: max-age 值指定缓存资源的有效期(单位秒)。当缓存资源的年龄超过 max-age 值时,浏览器会向服务器发送请求以获取最新版本。
  • public: public 值指定缓存资源可以被浏览器和代理服务器缓存。
  • private: private 值指定缓存资源只能被浏览器缓存,不能被代理服务器缓存。
  • no-cache: no-cache 值指定浏览器不能使用缓存资源,必须向服务器发送请求以获取最新版本。
  • no-store: no-store 值指定浏览器不能缓存资源,必须每次都向服务器发送请求。

ETag 头

ETag 头是一个 HTTP 响应头,用于验证缓存是否可用。ETag 头的值是服务器生成的唯一标识符,用来标识缓存资源的版本。当浏览器再次访问该网站时,它会将本地计算机上的缓存资源的 ETag 值与服务器返回的 ETag 值进行比较。如果两个 ETag 值相同,则表明缓存资源是最新的,浏览器可以直接从本地计算机上加载这些资源。如果两个 ETag 值不同,则表明缓存资源已过期,浏览器会向服务器发送请求以获取最新版本。

如何使用 HTTP 缓存

为了使用 HTTP 缓存,您需要在您的网站中设置 Cache-Control 头和 ETag 头。您可以通过在您的 Web 服务器的配置文件中添加以下代码来设置 Cache-Control 头:

<IfModule mod_headers.c>
Header set Cache-Control "public, max-age=3600"
</IfModule>

您可以通过在您的 Web 服务器的配置文件中添加以下代码来设置 ETag 头:

<IfModule mod_headers.c>
Header set ETag "%{FILE_ETAG}"
</IfModule>

结论

HTTP 缓存可以显著提升网站的性能,并减少服务器的负载。通过正确使用 HTTP 缓存,您可以让您的网站更快速、更可靠。