2012-02-20 139 views
3

我懷疑這是一個非常微不足道的問題。我正在編寫一個PHP腳本來響應AJAX查詢。該查詢應包含一些XML數據,PHP腳本將處理該數據,然後返回響應。我想考慮兩種錯誤情況:爲不正確的POST數據選擇正確的HTTP響應代碼

  1. 請求中沒有POST數據;或在XML
  2. 壞數據(無效,或者良好的XML,或失敗一些架構檢查)

在這種情況下,我相信我應該返回一個4XX響應代碼。有什麼比400更合適嗎?

更多詳細信息

爲了進一步說明問題:客戶端JavaScript應用是用於教育目的的圖編輯器。用戶需要創建一個正確模擬給定情況的圖表。然後學生可以提交圖表,圖表的XML序列化將通過AJAX調用發佈到服務器。一個PHP腳本分析圖表XML並構造一個XML報告,作爲AJAX響應發送給客戶端。我最初描述的兩種情況(不包括XML POST數據或無效的XML)在客戶請求時不應發生,但我認爲謹慎地正確捕獲和處理這些情況。因此我相信4xx響應代碼是合適的。 XML報告結構不適合這些情況,並且空的報告將等於完美的圖,顯然是不合適的,

回答

4

根據TCP/IP Guide中代碼的含義,似乎400是最好的選擇。似乎沒有什麼能夠滿足你的例子。

+0

是的,我也會和400一起去。大多數HTTP狀態代碼處理與HTTP本身相關的問題,而不是處理請求的內容,除非內容與HTTP標頭定義的期望相沖突。 – SpliFF 2012-02-20 03:38:43

+0

夠公平的,我猜我會和400一起住。非常感謝。 – beldaz 2012-02-20 04:04:11

1

我認爲你提到的兩個錯誤情況實際上會與不同的HTTP狀態代碼一起提供。來自W3C's Status Code Definitions

400錯誤請求 - 由於格式錯誤,請求無法被服務器理解。客戶端不應該在沒有修改的情況下重複請求。

409衝突 - 請求無法完成,因爲與資源的當前狀態的衝突....例如,如果版本正在使用,並陸續投放實體包括改革資源這與先前(第三方)請求所做的衝突,服務器可能會使用409響應來指示它無法完成請求....

因此,400是用於請求由於語法問題,身體甚至不能被解析。相比之下,409似乎適用於解析請求主體並且服務器理解請求的情況,但由於業務規則而拒絕履行請求的情況。

如果模式驗證失敗或XML語法錯誤,我同意其他海報,400是合適的。但在沒有POST數據的情況下,您認爲這是一個有效的圖表,但由於其他原因而無法接受,409似乎更適合我。