越来越多我看到十进制样式HTTP状态代码的激增,我似乎无法找到任何RFC或其他IETF推荐甚至W3C草案或其他任何内容,除了Microsoft IIS文档(请参阅https://support.microsoft.com/en-us/kb/943891 )
微软是凭空创造的吗?这些十进制样式状态代码是否会阻塞许多可能期望整数值的网络组件?
有谁知道这些小数状态代码的来源?
答案 0 :(得分:2)
朱利安上面的评论是正确的。
IIS定义子类以帮助区分同一定义状态代码中的案例以进行调试。这些不是在HTTP响应中的线路上发送的;正如其他人所说,这是一个整数。如果已配置,它们可能出现在响应实体中(默认情况下,仅适用于在同一主机上运行的客户端),并且它们已在“sc-substatus”列下的W3C日志中登录。
如果您在其他地方看到小数状态代码(原始问题),则需要跟进它们的来源。特别是,如果您在HTTP消息本身中看到它们,那就是协议合规性问题。
答案 1 :(得分:1)
如docs中所述,您还链接到:
[...]
IIS 7.0,IIS 7.5和IIS 8.0定义以下HTTP状态代码,指示400错误的更具体原因:
400.1 - 无效的目标标题。
400.2 - 深度标题无效。
400.3 - 标题无效。
[...]
是的,IIS定义了它们。
来自Wikipedia,有这个宝石:
[...]
状态代码的第一个数字指定五类响应中的一个; HTTP客户端的最低限度是它识别这五个类。使用的短语是标准示例,但可以提供任何人类可读的替代方案 [...]
所以它必须以1-5开头。
即使HTTP客户端不理解整个状态代码,它仍然可以决定它的响应类型:
<强> UPDATE1:强>
如RCF7231#6中所述:
状态代码元素是一个三位整数代码给出 试图理解并满足请求的结果。
但是:
HTTP状态代码是可扩展的。不需要HTTP客户端 了解所有已注册状态代码的含义,尽管如此 理解显然是可取的。但是,客户必须 了解任何状态代码的类,如第一个所示 数字,并将无法识别的状态代码视为等效 该类的x00状态代码,但a除外 收件人不得使用无法识别的状态代码缓存响应。
例如,如果a收到无法识别的状态代码471 客户端,客户端可以认为它有问题 请求并将响应视为已收到400(不良 请求)状态代码。响应消息通常包含一个 解释状态的表示。
<强> UPDATE2:强>
在PHP中设置404.1标头(尽管文档说它只接受整数)
http_response_code(404.1);
会产生经典的404
因此,总而言之,我认为客户端,当状态代码无法识别时(例如401.4
),将其转换为通用400
(保持状态类 - {{1填写4
)