哪些HTTP状态代码可以缓存?

时间:2016-09-08 19:18:52

标签: http http-status-codes cache-control

如标题所述,哪些HTTP状态代码可以作为浏览器缓存?我做了一个快速搜索,没有找到权威的答案。

最初我认为可能只有200好的回复,但我找不到任何支持这种想法的证据。

2 个答案:

答案 0 :(得分:13)

简短回答

根据RFC 7231,HTTP / 1.1协议的内容和语义的当前参考,以下HTTP状态代码被定义为可缓存,除非{{3}另有说明}}或method definition

答案很长

501 Not Implemented声明了以下关于默认情况下可缓存的HTTP状态代码:

  

RFC 7231

     

[...]响应状态代码,默认情况下定义为可缓存     (例如,200203204206300301404405410414501     具有启发式的缓存可以重用此规范)     到期,除非6.1. Overview of Status Codes或     method definition;所有其他状态代码不是     默认情况下可缓存。 [...]

一旦HTTP状态代码是可扩展的,收件人必须注意缓存具有无法识别的状态代码的响应:

  

explicit cache controls

     

status-code元素是一个三位整数代码给出     试图理解并满足请求的结果。

     

HTTP状态代码是可扩展的。不需要HTTP客户端     了解所有已注册状态代码的含义,尽管如此     理解显然是可取的。但是,客户必须     了解任何状态代码的类,如第一个所示     数字,并将无法识别的状态代码视为等效     该类的x00状态代码,但a除外     收件人不得缓存具有无法识别的状态代码的响应。 [...]

缓存还取决于HTTP方法:

  

6. Response Status Codes

     

请求方法可以定义为"可缓存"表明这一点     允许存储对它们的响应以供将来重用。一般来说,安全的方法     不依赖于当前或权威的响应被定义为     缓存;此规范将GETHEADPOST定义为     可缓存,虽然绝大多数是缓存     实现仅支持GETHEAD

关于POST方法,有一个重要的细节:

  

4.2.3. Cacheable Methods

     

[...]对POST个请求的回复只有在包含时才可以缓存     4.3.3. POST [...]

有关详细信息,请查看explicit freshness information

其他资源

答案 1 :(得分:0)

根据RFC7234,还允许缓存提供超过200的其他代码的响应(OK):

  

[...]      最常见的缓存条目形式是a的成功结果      检索请求:即对GET请求的200(OK)响应,即      包含请求标识的资源的表示      目标([RFC7231]第4.3.1节)。但是,也有可能      缓存永久重定向,否定结果(例如,404(未找到)),不完整的结果(例如,206(部分内容)),以及对      GET以外的方法,如果方法的定义允许这样的缓存      并定义适合用作缓存键的内容。

因此,它取决于浏览器开发人员他想要缓存的内容以及不需要的内容。