2010-07-20 63 views
50

我在寫一個僅接受json的web服務,而且只輸出json。HTTP 406和415錯誤代碼

所以我需要返回適當的狀態碼,如果任何其他格式的要求。

看來,我有兩個選擇:

  1. 406 - 不接受
  2. 415 - 不支持的媒體類型

這將是巨大的,如果有人能賜教,以語義這兩個代碼。

回答

99

服務器根據接受請求頭(即它們有一個Accept頭,它聲明它們只有只有需要XML)而無法響應時返回406。

當請求(POST或PUT中的內容)中發送的實體具有不受支持的媒體類型(即它們發送XML)時,服務器返回415。

so .. 406當你不能發送他們想要的,415當他們發送你不想要的東西時。

希望有幫助!

3

當客戶端使用Accept標頭請求不支持的內容類型(在您的情況下,除JSON以外的任何內容)的響應時使用406。另一方面,當客戶端POST或PUT數據處於不支持的內容類型時,會使用415。

簡而言之:如果不能以預期的格式輸出,請使用406;如果您不支持輸入格式,請使用415。

參見RFC 2616的定義:406415

5

引述RFC2616

406不可接受

由請求 所標識的資源只能生成響應 實體其中內容 特徵不可接受 根據接受頭文件sen t請求中的 。

當客戶端查詢您的服務時,請檢查它發送的標頭是什麼Accept*;如果它不符合application/json(或通配符,例如*/*),請返回此項。迴應應該表明「我們只在這裏提供JSON」。

415不支持的媒體類型

服務器拒絕,因爲 請求的實體是不爲 請求方式的請求源支持 的格式以服務 請求。

只是返回415 Unsupported Media Type應該是「客戶端發送的內容不是JSON,不能使用」的最小響應。不知道是否有標題表明「您需要發送JSON」

-2

RFC2616可以幫助您!

http://www.rfc2616.com/#10.4.7

http://www.rfc2616.com/#10.4.16

我會選擇415,它適合你的描述相當不錯。

編輯:哦。我知道了。 「請求的實體採用請求資源不支持的格式」。因此,如果您有內容請求並且內容類型錯誤,則應該發出415迴應。

+0

他需要兩種不同的場景 – nathan 2010-07-20 21:37:20

+0

我討厭你可以直接回答的問題。他們在得分方面很出色,但需要快速和正確的迴應。 :/ – Cheery 2010-07-20 21:48:15

31
  • 406如果發送了Accept標頭,則無法填滿。
  • 415如果發送了Content-Type,則不能使用。