当浏览器向服务器请求资源时,服务器可以通过响应头中的一些字段来指示浏览器如何处理缓存。这些字段可以控制缓存的行为,包括资源的过期时间、缓存的验证方式等。以下是一些常见的缓存控制策略:
-
Expires:Expires 是一个响应头字段,表示资源的过期时间。服务器会告诉浏览器,在过了 Expires 字段指定的时间后,浏览器必须向服务器发送请求来验证资源是否有更新。例如:
Expires: Wed, 21 Oct 2026 07:28:00 GMT
上面的例子表示资源的过期时间是 2026 年 10 月 21 日,过了这个时间后浏览器会向服务器发送新的请求。
-
Cache-Control:Cache-Control 是一个更加灵活的缓存控制字段,可以通过指定不同的指令来控制缓存的行为。常见的指令包括:
public
:表示响应可以被任何缓存保存,包括代理服务器和浏览器缓存。private
:表示响应只能被浏览器缓存保存,不允许被代理服务器缓存。max-age
:指定资源在缓存中的最大有效时间,以秒为单位。例如,max-age=3600
表示资源在缓存中的最大有效时间是 3600 秒(1 小时)。no-cache
:表示浏览器在使用缓存资源之前必须先验证其有效性,即发送条件请求。no-store
:表示不缓存响应的任何部分。
例如:
Cache-Control: max-age=3600, public
上面的例子表示资源在缓存中的最大有效时间是 3600 秒(1 小时),并且可以被任何缓存保存。
-
Last-Modified 和 If-Modified-Since:Last-Modified 是一个响应头字段,表示资源的最后修改时间。当浏览器再次请求该资源时,会通过 If-Modified-Since 请求头字段将上次请求资源时的 Last-Modified 时间发送给服务器。如果资源在这个时间之后没有被修改过,服务器会返回 304 Not Modified,告诉浏览器可以使用缓存的资源。例如:
Last-Modified: Wed, 21 Oct 2026 07:28:00 GMT
-
ETag 和 If-None-Match:ETag 是一个响应头字段,表示资源的标识符,通常是资源的哈希值或者版本号。当浏览器再次请求该资源时,会通过 If-None-Match 请求头字段将上次请求资源时的 ETag 发送给服务器。如果资源的 ETag 没有改变,服务器会返回 304 Not Modified,告诉浏览器可以使用缓存的资源。例如:
ETag: "abc123"
这些是常见的缓存控制策略,它们可以帮助开发者控制浏览器缓存的行为,优化网站的性能和用户体验。