可缓存

可缓存的响应是指可以被缓存的 HTTP 响应,即可以被存储以便稍后检索和使用,从而节省向服务器发出新的请求。并非所有 HTTP 响应都可以被缓存;以下是 HTTP 响应可缓存的限制条件:

  • 请求中使用的方法是可缓存的,即 GETHEAD 方法。如果指示了新鲜度并设置了 Content-Location 标头,对 POSTPATCH 请求的响应也可以被缓存,但这很少被实现。例如,Firefox 不支持它(Firefox bug 109553)。其他方法,如 PUTDELETE 是不可缓存的,它们的结果不能被缓存。
  • 响应的状态码被应用程序缓存识别,并且是可缓存的。以下状态码是可缓存的:200203204206300301404405410414501
  • 响应中没有特定的标头,例如 Cache-Control,其值会禁止缓存。

请注意,某些对特定 URI 的非缓存响应可能会使同一 URI 之前缓存的响应失效。例如,对 /pageX.htmlPUT 请求将使所有对 /pageX.htmlGETHEAD 请求的缓存响应失效。

当请求的方法和响应的状态都可缓存时,对该请求的响应可以被缓存。

http
GET /pageX.html HTTP/1.1
(…)

200 OK
(…)

PUT 请求的响应不能被缓存。此外,它会使使用 HEADGET 方法对同一 URI 的请求的缓存数据失效。

http
PUT /pageX.html HTTP/1.1
(…)

200 OK
(…)

响应中带有特定值的 Cache-Control 标头的存在可以阻止缓存。

http
GET /pageX.html HTTP/1.1
(…)

200 OK
Cache-Control: no-cache
(…)

另见

  • HTTP 规范中提供了有关方法和缓存的详细信息。
  • 常见可缓存方法的描述:GETHEAD
  • 常见不可缓存方法的描述:PUTDELETE,通常还有 POST