2012-08-02 256 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

相關問題