首页 > 解决方案 > 是否允许符合标准 (RFC 7230) 的 HTTP 服务器仅响应 400 错误请求?

问题描述

阅读RFC 7230: Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing时出现的一个问题是“符合此标准的最简单的服务器是什么”。在文档中搜索“必须”,在我看来,服务器必须返回的唯一响应是 400 错误,如果请求格式不正确:

服务器必须拒绝任何接收到的请求消息,该消息包含标头字段名称和冒号之间的空格,响应代码为 400(错误请求)。

(3.2.4. 字段解析)

如果请求中存在 Transfer-Encoding 头字段,并且分块传输编码不是最终编码,则无法可靠地确定消息体长度;服务器必须响应 400(错误请求)状态码,然后关闭连接。

(3.3.3. 消息体长度 .3)

如果这是一个请求消息,服务器必须以 400(错误请求)状态码响应,然后关闭连接。

(3.3.3. 消息体长度 .4)

其中。

在某些情况下,标准规定服务器必须返回某个状态码,但它们似乎都被一些更强大的子句变成了可选的,例如:

如果服务器接收到带有“100-continue”期望的 Upgrade 和 Expect 头字段([RFC7231] 的第 5.1.1 节),服务器必须在发送 101(交换协议)响应之前发送 100(继续)响应.

(6.7 升级)

成为可选的

如果服务器希望继续在该连接上使用当前协议,则服务器可以忽略接收到的升级头字段。升级不能用于坚持协议更改。

(6.7 升级)

所有这一切让我相信标准技术上允许仅 400 台服务器。

这对我来说似乎很奇怪,我认为 400 标头意味着请求本身在某种程度上是错误的,并且如果请求格式正确但在其他方面无效,服务器必须以其他一些错误进行响应。

我是否遗漏了标准或其他相关标准中的某些内容,或者是否允许仅 400 个服务器?

(作为旁注,第 2.6 节指出

如果服务器出于任何原因希望拒绝客户端的主要协议版本的服务,它可以发送 505(不支持 HTTP 版本)响应。

这让我相信实际上会允许一个仅限 505 的服务器,虽然很无聊)

标签: httplanguage-lawyerstandardsbad-requestrfc

解决方案


推荐阅读