2011-03-20 103 views
24

我不清楚你什麼時候應該也不應該返回一個HTTP 412:先決條件失敗,錯誤的Web服務?我正在考慮在驗證數據時使用它。例如,如果客戶端POST的XML數據和該數據缺少所需的數據元素,則使用412和錯誤描述進行響應。什麼時候適合使用HTTP 412錯誤進行響應?

這是否符合使用HTTP 412響應的精神,還是應該使用別的東西(例如另一個http錯誤代碼或Web應用程序異常)?

回答

7

最好的辦法是避免412.在實踐中,我使用的大多數web服務都發送了400 code (Bad Request)。許多框架也內置了對400的支持,您的客戶會喜歡更常見的錯誤代碼。通常,特別是使用REST接口時,會返回一個簡單的「消息」或「錯誤」元素和說明。

+2

無論如何,客戶應該將任何未知的4xx代碼視爲400。 – 2014-05-13 11:58:50

+1

404怎麼樣? – JoelFan 2016-05-02 16:30:12

+0

@JoelFan 404不會是一個未知的代碼。這個應該可能被處理,而沒有明確處理的任何400-499代碼應該被視爲通用400. – BamaPookie 2016-06-29 19:48:46

45

如果你看看RFC 2616你會看到一個數字,可以用來申請條件的請求的請求頭:

If-Match 
If-Modified-Since 
If-None-Match 
If-Range 
If-Unmodified-Since 

這些報頭包含「先決條件」,允許客戶端告訴服務器只有在滿足特定條件的情況下才能完成請求。例如,您使用PUT請求來更新資源的狀態,但如果該資源自最近的GET以來未由其他人修改,則只需要PUT即可執行操作。

響應狀態代碼412(先決條件失敗)通常在這些先決條件失敗時使用。

您的示例聽起來像一個無效請求(即客戶端提交的數據由於缺失值而無效)。國際海事組織在這裏更合適的狀態代碼400(Bad Request)。

+0

@TERACytE你有可能接受這個嗎? – joelittlejohn 2016-12-06 00:43:04

6

412用於請求有條件且條件未滿足的情況。

對於您的使用案例,422 Unprocessable Entity是一個很好的匹配項。

+4

值得一提的是,狀態碼「422」不是RFC 2616的一部分。它是WebDAV HTTP 1.1擴展的一部分。 – joelittlejohn 2011-03-20 18:58:21

+1

joelittlejohn:爲什麼這是一個問題?狀態碼是RFC 2616中的一個擴展點,這是一個非常有用的擴展。 – 2011-06-18 07:28:34

+2

我不是故意暗示這是一個問題,只是它值得一提:) – joelittlejohn 2011-06-29 23:40:28

相關問題