如标题所述,哪些HTTP状态代码可以作为浏览器缓存?我做了一个快速搜索,没有找到权威的答案。
最初我认为可能只有200
好的回复,但我找不到任何支持这种想法的证据。
答案 0 :(得分:13)
根据RFC 7231,HTTP / 1.1协议的内容和语义的当前参考,以下HTTP状态代码被定义为可缓存,除非{{3}另有说明}}或method definition:
200
OK 203
Non-Authoritative Information 204
No Content 206
Partial Content 300
Multiple Choices 301
Moved Permanently 404
Not Found 405
Method Not Allowed 410
Gone 414
URI Too Long 501
Not Implemented声明了以下关于默认情况下可缓存的HTTP状态代码:
[...]响应状态代码,默认情况下定义为可缓存 (例如,
200
,203
,204
,206
,300
,301
,404
,405
,410
,414
和501
具有启发式的缓存可以重用此规范) 到期,除非6.1. Overview of Status Codes或 method definition;所有其他状态代码不是 默认情况下可缓存。 [...]
一旦HTTP状态代码是可扩展的,收件人必须注意缓存具有无法识别的状态代码的响应:
status-code元素是一个三位整数代码给出 试图理解并满足请求的结果。
HTTP状态代码是可扩展的。不需要HTTP客户端 了解所有已注册状态代码的含义,尽管如此 理解显然是可取的。但是,客户必须 了解任何状态代码的类,如第一个所示 数字,并将无法识别的状态代码视为等效 该类的
x00
状态代码,但a除外 收件人不得缓存具有无法识别的状态代码的响应。 [...]
缓存还取决于HTTP方法:
请求方法可以定义为"可缓存"表明这一点 允许存储对它们的响应以供将来重用。一般来说,安全的方法 不依赖于当前或权威的响应被定义为 缓存;此规范将
GET
,HEAD
和POST
定义为 可缓存,虽然绝大多数是缓存 实现仅支持GET
和HEAD
。
关于POST
方法,有一个重要的细节:
[...]对
POST
个请求的回复只有在包含时才可以缓存 4.3.3. POST [...]
有关详细信息,请查看explicit freshness information。
答案 1 :(得分:0)
根据RFC7234,还允许缓存提供超过200的其他代码的响应(OK):
[...] 最常见的缓存条目形式是a的成功结果 检索请求:即对GET请求的200(OK)响应,即 包含请求标识的资源的表示 目标([RFC7231]第4.3.1节)。但是,也有可能 缓存永久重定向,否定结果(例如,404(未找到)),不完整的结果(例如,206(部分内容)),以及对 GET以外的方法,如果方法的定义允许这样的缓存 并定义适合用作缓存键的内容。
因此,它取决于浏览器开发人员他想要缓存的内容以及不需要的内容。