扩展(十进制,例如400.1,401.4等)HTTP状态代码来自何处?

aim*_*ass 6 http http-status-codes

越来越多我看到十进制样式HTTP状态代码的激增,我似乎无法找到任何RFC或其他IETF推荐甚至W3C草案或其他任何内容,除了Microsoft IIS文档(请参阅https://support.microsoft. com/en-us/kb/943891)

微软是凭空创造的吗?这些十进制样式状态代码不会阻塞很多可能期望整数值的网络组件吗?

有谁知道这些小数状态代码来自哪里?

Ale*_*tan 2

正如文档中提到的,您还链接到:

[...]
IIS 7.0、IIS 7.5 和 IIS 8.0 定义了以下 HTTP 状态代码,指示 400 错误的更具体原因:
400.1 - 无效的目标标头。
400.2 - 深度标题无效。
400.3 - If 标头无效。
[...]

所以是的,IIS 定义了它们。

维基百科,有这个宝石:

[...]
状态代码的第一个数字指定五类响应之一;HTTP 客户端的最低要求是它能够识别这五个类。使用的短语是标准示例,但可以提供任何人类可读的替代方案。
[...]

所以它只是强制以 1-5 开头。

即使 HTTP 客户端不理解整个状态代码,它仍然可以决定它是什么类型的响应:

  • 1xx 信息
  • 2xx 成功
  • 3xx 重定向
  • 4xx 客户端错误
  • 5xx 服务器错误

更新1:

如RCF7231#6中所述:

状态代码元素是一个三位整数代码,给出尝试理解和满足请求的结果。

但是也:

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

例如,如果客户端收到无法识别的状态代码 471,则客户端可以假设其请求出现问题,并将响应视为收到 400(错误请求)状态代码。响应消息通常包含解释状态的表示。


更新2:

在 PHP 中设置 404.1 标头(尽管文档说它只接受整数)

http_response_code(404.1);
Run Code Online (Sandbox Code Playgroud)

结果成为经典404


因此,总而言之,客户,当状态代码无法识别时(例如 a 401.4),将其转换为通用代码400(保留状态类 -4并填充00

  • 只是指出 Microsoft 并不违反 RFC——这些代码不会在 HTTP 状态代码中发送。它们位于实体主体和日志中,以提供更高的精度。 (2认同)