Jetty 在格式错误的 HTTP POST 标头上返回“HTTP/1.1 400 Bad Request”。这是预期的吗?
Posted
技术标签:
【中文标题】Jetty 在格式错误的 HTTP POST 标头上返回“HTTP/1.1 400 Bad Request”。这是预期的吗?【英文标题】:Jetty returning "HTTP/1.1 400 Bad Request" on malformed HTTP POST header. Is this expected? 【发布时间】:2013-10-22 14:51:56 【问题描述】:http post header 中有空格会导致请求错误吗??
我在其中一个请求中看到了这一点: 内容类型 "text/xml; c harset=utf-8"
我收到一个 HTTP/1.1 400 错误请求
但是如果发布相同的请求 内容类型 "text/xml; charset=utf-8"
即在字符集中没有空格它可以工作。
在我的实现中,我没有进行任何验证。 所以我假设我的 Jetty 服务器抛出了一个错误的请求,因为 charset 中有一个空格??
我是对的还是我的解释错了。
谢谢!!
【问题讨论】:
【参考方案1】:是的,有一个放置空间的地方应该会导致错误的请求。
HTTP 1.1 是由标准定义的协议。通过参考标准文档,可以确定什么是有效请求,什么不是有效请求。
您可以在 RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1 找到 HTTP/1.1 的标准,并且您可能特别想查看 14.17 Content-Type 和 3.7 Media Types 部分。
基本上,通过将空格插入"charset"
,您正在创建一个无效的 HTTP 请求,因为该协议不理解 "c"
和 "harset"
部分。在该上下文中,这些未定义为有效文本。
此外,虽然协议知道什么看起来是有效的,什么是无效的,但它还不够聪明,无法推断出如何修复这种简单的错字。因此,服务器响应“400 Bad Request”是合适的并且符合协议标准。对于它的价值,您还可以找到HTTP status codes in the RFC。状态码400 Bad Request表示:
由于格式错误,服务器无法理解请求 句法。客户端不应该重复请求 修改。
即不要那样做。 :)
【讨论】:
以上是关于Jetty 在格式错误的 HTTP POST 标头上返回“HTTP/1.1 400 Bad Request”。这是预期的吗?的主要内容,如果未能解决你的问题,请参考以下文章
Zend_Http_Client - 为啥我的 POST 请求发送错误的内容类型标头?
用于分块编码 POST 的 HTTP 标头 - 错误 411
我应该如何配置我的标头以对 APNs 进行 HTTP/2 POST 以避免“收到重复的伪标头字段”错误?