可缓存
可缓存的响应是可以缓存的 HTTP 响应。它被存储起来以便后续的检索和使用,省去了对服务器的新的请求。并非所有的 HTTP 响应都可以被缓存,以下是 HTTP 响应被缓存的约束条件:
- 请求中使用的方法本身就是可缓存的,即
GET
或HEAD
方法。如果指示了有效期并且设置了Content-Location
标头,POST
或PATCH
请求的响应也可以被缓存,但是这很少被实现。例如,Firefox 就不支持它(Firefox bug 109553)。其他方法,如PUT
或DELETE
是不可缓存的,其结果也不能被缓存。 - 响应的状态码对应用程序的缓存可知,且被认为是可缓存的。以下状态代码是可缓存的:
200
、203
、204
、206
、300
、301
、404
、405
、410
、414
和501
。 - 响应中有一些特定的标头,如可以防止缓存的
Cache-Control
。
请注意,对特定 URI 的一些不可缓存的请求或响应可能会使同一 URI 上先前缓存的响应失效。例如,对 /pageX.html
的 PUT
将使所有对 /pageX.html
的 GET
或 HEAD
的缓存请求失效。
当请求的方法和响应的状态码都是可缓存的,对请求的响应就可以被缓存:
http
GET /pageX.html HTTP/1.1
(…)
200 OK
(…)
PUT
请求不能被缓存。此外,通过 HEAD
或 GET
对同一 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
(…)