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

set*_*son 8 http cache-control http-status-codes

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

最初我认为它可能只是200好的回应,但我找不到任何支持这种想法的证据.

cas*_*lin 15

简短的回答

根据RFC 7231(HTTP/1.1协议的内容和语义的当前参考),以下HTTP状态代码被定义为可缓存,除非方法定义显式缓存控件另有指示:

答案很长

RFC 7231规定对于那些默认为缓存的HTTP状态代码如下:

6.1.状态代码概述

[...]与被定义为默认缓存状态码的响应(例如,200,203,204,206,300,301,404,405,410,414,和501在本说明书中),除非另有说明,可以通过用启发式期满缓存中重用方法定义显式缓存控件 ; 默认情况下,所有其他状态代码都不可缓存.[...]

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

6.响应状态代码

status-code元素是一个三位整数代码,给出了理解和满足请求的尝试结果.

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

缓存还取决于HTTP方法:

4.2.3.可缓存的方法

请求方法可以定义为"可缓存",以指示允许存储对它们的响应以供将来重用.通常,不依赖于当前或权威响应的安全方法被定义为可缓存的; 尽管绝大多数缓存实现仅支持和,但此规范定义GET,HEAD并且POST可缓存.GETHEAD

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

4.3.3.POST

[...]对POST请求的响应只有在包含显式新鲜度信息时才可以缓存 [...]

有关更多详细信息,请检查每种方法定义.

其他资源