2015-06-11 34 views
0

假設在我的RESTful接口中,我需要客戶端包含一些特殊的頭文件,以表明它是授權客戶端。 (請相信我;這是項目的一項要求。)如果HTTP請求在此頭中包含不正確的值,則服務器需要發回一個HTTP響應,客戶端可以識別它在頭中發送了不支持的值。返回專門的HTTP響應的正確方法是什麼?

什麼是使用HTTP發回此信息的適當方式?

  • 我可以發回一個400 Bad Request響應,但是如何告訴客戶究竟是什麼問題?顯而易見的選擇是在響應的主體中包含一些消息。但是(除了i18n的問題),客戶端盲目地顯示錯誤信息的內容真的是一個好主意嗎?
  • 我可以發回一個400 Bad Request響應,並帶有一個專用的特殊標題,指明這樣的標頭有錯誤的代碼。這有一個好處,即客戶可以實際處理錯誤是什麼(而不是內容中的自由文本)。那麼400響應會成爲一個全面的響應,在某些專有頭中會出現實際的錯誤?這是一個很好的一般模式?但這幾乎暗示...
  • 我可以發回一些具有專有含義的任意4XX響應,如472 Bad Foo Header Value。微軟似乎有時走這條路。顯而易見的問題是未來版本的HTTP(或與其他人完成相同的事情)發生衝突的可能性。

我想我更傾向於400 Bad Request與一個特殊的標題指示錯誤專業化。對這個用例有任何想法或經驗?

+0

「Guidance」==「也許不屬於[so]」。 –

+0

Puleaze。如果您不喜歡「指導」一詞,我會將其更改爲「返回自定義HTTP響應的最佳方式」?請看整個句子的語義。 –

+0

我的意思是你正在尋求指導而不是問一個特定的編程問題。 [so]不是指導的地方。我可以輕易地投票決定將此視爲「主要基於觀點的」,因爲您「傾向於」,因爲您正在尋找「想法或經驗」。 –

回答

1

如果特殊標題格式不正確,則可以發送 400錯誤請求指示標題錯誤的響應。

但是如果頭的唯一目的是授權,你拒絕了,因爲無效值的頭,那麼我會選擇:

  1. 403 - 禁止,如果你想連接被拒絕
  2. 401 - 未經授權,如果客戶端應該嘗試重新進行身份驗證

在響應短語可以指示拒絕連接的原因。

+0

是的,但如果它是一個認證或授權標題,那麼不要過於具體的原因!只是「未經授權」就足夠了。 –

+0

問題是,如果我們發回'401'或'403',客戶端將嘗試重新進行身份驗證並彈出一個對話框,要求重新輸入用戶的憑據。我想我們可以添加一個特殊的標題,指明被禁止的確切原因,以便客戶端可以區分它和認證問題,但是我們可以用'400'做同樣的事情。 –

+0

它是一個Javascript客戶端嗎?然後,一個ajax post請求,錯誤處理將做的伎倆。 http://stackoverflow.com/questions/2833951/how-to-catch-ajax-query-post-error – Nils

相關問題