0
POST http://anyservice.com/my/servlet/interface/v1/book/events  
Content-Type: application/xml  
Accept: application/xml  
Authorization: Basic cXRE456ggz  

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<CreateEvent>
  <serviceType>ABC</serviceType>
  <Version>2&#xD;</Version>
  <data>xyz</data>
</CreateEvent>

我猜测 CRLF 即#xD;在 HTTP BODY 中间是非法的,但我在任何 RFC 中都找不到参考。

为什么我会收到此 POST 的“HTTP 状态 400 - 非法请求正文”?

4

1 回答 1

1

这并不表示请求体不符合 HTTP,而是表示请求不符合应用程序。可以说 400 在这种情况下是错误的响应代码,但同时我也知道自己在这种情况下使用它。

真的(恕我直言),当请求不符合上层应用程序时,应该使用单独的响应代码,并且 400 应该保留用于(如 RFC2616 所述)HTTP 协议级别的“格式错误的语法”。但是没有,所以 400 是最有意义的。

我猜测它为什么会在您的输入中出现问题是因为您有 XML 语法错误 - 开始<CreateEvent>标签丢失它正在关闭>

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><CreateEvent<serviceType>ABC</serviceType>...
                                                                  ^^ Missing >

他们也可能不喜欢回车,在这种情况下只需将其删除即可。

于 2012-08-02T12:17:49.057 回答