返回

HTTP 系列 —— 首部字段:服务器如何处理缓存资源?

前端

HTTP 缓存机制

HTTP 缓存机制是一种客户端和服务器之间的协议,用于减少重复的 HTTP 请求,并提高网络性能。当浏览器第一次请求一个资源时,服务器会返回该资源的内容和一些首部字段,其中包括缓存控制首部字段。缓存控制首部字段告诉浏览器如何缓存该资源。

缓存控制首部字段

HTTP 中常用的缓存控制首部字段有:

  • Cache-Control
  • Pragma
  • Expires
  • Last-Modified

Cache-Control

Cache-Control 是最重要的缓存控制首部字段,它允许我们指定对资源的缓存行为。Cache-Control 可以取以下值:

  • max-age=seconds :指定资源的缓存时间,单位是秒。例如,Cache-Control: max-age=3600 表示资源可以在浏览器中缓存 1 小时。
  • no-cache :告诉浏览器在使用缓存资源之前,必须经过服务器的检查。
  • no-store :告诉浏览器不要缓存该资源。
  • must-revalidate :告诉浏览器在使用缓存资源之前,必须向服务器确认该资源是否仍然是最新的。
  • proxy-revalidate :告诉代理服务器在使用缓存资源之前,必须向服务器确认该资源是否仍然是最新的。

Pragma

Pragma 首部字段与 Cache-Control 类似,但它已被 Cache-Control 取代。Pragma 中最常用的值是 no-cache ,它告诉浏览器在使用缓存资源之前,必须经过服务器的检查。

Expires

Expires 首部字段指定资源的过期时间。当资源过期后,浏览器将不会使用缓存资源,而是从服务器重新加载。Expires 的值是一个绝对时间,格式为 HTTP-date 。例如,Expires: Wed, 21 Oct 2015 07:28:00 GMT 表示资源将在 2015 年 10 月 21 日 07:28:00 GMT 过期。

Last-Modified

Last-Modified 首部字段指定资源的最后修改时间。当浏览器再次请求该资源时,服务器会将该资源的 Last-Modified 首部字段与浏览器缓存中的 Last-Modified 首部字段进行比较。如果服务器上的资源更新时间比浏览器缓存中的资源更新时间晚,则浏览器将从服务器重新加载该资源。

如何使用缓存控制首部字段

我们可以通过在 HTTP 响应头中设置缓存控制首部字段来控制浏览器对资源的缓存行为。例如,以下代码将设置资源的缓存时间为 1 小时:

Cache-Control: max-age=3600

以下代码将告诉浏览器在使用缓存资源之前,必须经过服务器的检查:

Cache-Control: no-cache

以下代码将告诉浏览器不要缓存该资源:

Cache-Control: no-store

总结

HTTP 缓存机制是一种客户端和服务器之间的协议,用于减少重复的 HTTP 请求,并提高网络性能。我们可以通过设置缓存控制首部字段来控制浏览器对资源的缓存行为。