2009-08-04 108 views
28

按照HTTP規範:是否允許HTTP POST請求發回響應主體?

如果資源已經在 源服務器上創建的,則響應應該 是201(創建)和包含其描述了 請求的狀態,並且是指一個實體 到新的 資源和位置標題 (請參閱第14.30節)。

這是否意味着POST請求應始終在沒有響應正文的位置標頭中發送重定向URI?

回答

25

指定響應主體同時使用位置標頭是完全可以接受的。當使用帶有201響應的位置標題時,您不重定向客戶端,您只是告訴它將來可以找到資源的位置。

重定向僅適用於3xx響應。

W3C docs for this進一步解釋,雖然文本實際上是相當含糊:

位置響應報頭字段用於收件人比的Request-URI以外的位置重定向請求的完成或識別新資源。對於201(已創建)響應,該位置是由請求創建的新資源的位置。對於3xx響應,位置應該指出服務器首選的URI,以便自動重定向到資源。

我讀到「...重定向...或...識別[y] ...新資源」,但它不完全是一個普通的英語句子。

+6

答案是?它是「單詞,否」或「你可以指定一個響應主體並同時使用位置標題」? – 2009-08-04 13:38:54

12

基於paragraph 9.5 of the HTTP 1.1 specification,這對於這樣的問題的參考,這是我的理解:

當然可以,而且規格是清楚的,你可以做什麼和怎麼做:

POST方法執行的操作可能不會導致可以通過URI標識的資源。在這種情況下,根據響應是否包含描述結果的實體,200(OK)或204(無內容)是適當的響應狀態。

如果在原始服務器上創建了一個資源,那麼迴應應該是201(Created)並且包含描述請求狀態並引用新資源的實體和位置標題(參見14.30節) 。

對此方法的響應不可緩存,除非響應包含適當的Cache-ControlExpires標題字段。但是,303(請參閱其他)響應可用於指示用戶代理檢索可緩存資源。