2012-08-02 254 views
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 - 非法请求正文”?

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

+0

也许是因为&符号在XML中是非法的。 – heikkim 2012-08-02 10:35:43

+0

你能提供一个RFC参考吗?! – user77115 2012-08-02 10:40:24

回答

1

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

真的(恕我直言)应该有一个单独的响应代码,当请求不符合覆盖的应用程序时使用,400应保留在HTTP协议级别的“格式错误的语法”(as RFC2616 states)。但没有,所以400最有意义。

我,为什么它borks在您输入的猜测是因为你有一个XML语法错误 - 开<CreateEvent>标签丢失它的收盘>

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

这也有可能是他们不喜欢的回车,它只是将它剥离出来。

+0

抱歉,缺少>是一个错字,应用程序是内部的,而不是谷歌。 我想原则保持不变,它是有效的,有ampersandxD;在POST正文中。 – user77115 2012-08-02 12:41:30

+0

在请求正文中没有*内容*无效。除非您使用的方法不允许使用主体,或者内容类型与内容不匹配。也许尝试一种内容类型的“text/xml”?此外,您的请求似乎没有包含“Host:”或“Content-Length:”标头或HTTP版本,并且URI是完整的URL - 所有这些都是RFC违规(最后一个不是,如果您正在使用代理服务器,而'Content-Length:'是必需的,因为您使用的是POST方法) - 您说应用程序是内部的,您是否控制源代码? – DaveRandom 2012-08-02 12:55:56

+0

感谢您指出RFC违规。 – user77115 2012-08-02 13:55:19

相关问题