2016-01-11 42 views
1

我有一個RESTful Web服務,它需要先接受最終用戶許可協議(EULA)才能使用。「EULA未被接受」的HTTP狀態碼?

如果EULA尚未被接受,哪個HTTP狀態代碼最適合Web服務返回?

目前我看到下面的可能性(以粗體我目前最喜歡的):

  • 403禁止
  • 412預處理失敗
  • 417預期失敗
  • 423鎖定
  • 428前提要求#
  • 451不可用法律原因
+0

所以,只要選擇任何。你有什麼問題? :)對於選擇「最合適的」狀態代碼,您可以列出您可以發送它們的所有條件,並跨越其要求與您的方案不匹配的任何列表。 – CodeCaster

+0

我看到有幾個密切的選票。顯然這被認爲是一個意外驅動的問題,讓我感到驚訝 - 它真的只是我個人的口味?在所有的HTTP狀態代碼被標準化之後,如果我選擇了,例如, 404來表示EULA問題,即使每個人看到該狀態代碼都會立即認爲所請求的資源不在那裏? –

+1

這並不是說問題是基於意見的,而是像目前所說的那樣,它吸引了基於意見的答案,而不是基於事實的答案。這是關於_「針對任意情況X使用哪個HTTP狀態碼」的問題所固有的,因爲人們不會閱讀RFC。 **你**應該能夠做到這一點,就像我在之前的評論中指出的那樣。列出候選代碼並排除您的情況與您不符的任何條件。 – CodeCaster

回答

2

CodeCaster所示,我去了w3.org,看了看definitions of HTTP Status Codes in RFC2616。我找到狀態代碼403是最合適的:

10.4.4 403禁止

服務器理解了請求,但拒絕執行。 授權不起作用,請求不應重複。如果 請求方法不是HEAD,並且服務器希望公開 爲什麼請求沒有被滿足,它應該描述在實體中拒絕的原因 。如果服務器不希望向客戶端提供此信息,則可以使用狀態代碼404(不是 找到)代替。

0

消息應該是自我解釋的,我的投票也是412先決條件失敗。

+1

但這不是HTTP狀態碼的工作方式。請閱讀[什麼時候適合以HTTP 412錯誤迴應?](http://stackoverflow.com/questions/5369480/when-is-it-wool-to-respond-with-a-http-412-error )。 412將返回失敗的條件請求。 – CodeCaster

0

401未授權

正如喬治·克魯尼會說:「!還有什麼」。您同意EULA後授權其他人訪問您的服務。他們沒有做,所以他們沒有被授權(要符合RFC,認證和重試客戶端將不得不包括WWW-Authenticate標題,但您必須不知何故無論如何提供該信息,這種方式是就像任何其他方式一樣好)。

在另一種想法上,您可以返回指向協議頁面的。該方法背後的原因是4xx代碼表示錯誤情況。但是,尚未同意EULA(除失敗身份驗證外)並非真正的錯誤情況。
這是防止服務被使用,是的......但一切都「工作正常」。

+0

這個問題與認證無關。你說的是認證,這不是401的用途。查看[403 Forbidden vs 401未授權的HTTP響應](http://stackoverflow.com/questions/3297048/403-forbidden-vs-401-unauthorized-http-responses)。 – CodeCaster

+0

當然,第二個「認證」應該是「授權」。 – CodeCaster

+0

@CodeCaster:不,它不應該。 Q中被接受的答案完全證實了我的推理。代碼的含義是服務器收到一個完整的,有效的請求,但它沒有收到一個認證令牌(因此你的困惑!),它授權**你訪問資源。這可能是因爲你的代幣無效或者屬於錯誤的羣體或者任何東西,或者僅僅是因爲你根本沒有提供代幣。現在,這就是這裏發生的事情。您必須同意EULA,並獲得一個令牌,以驗證您是否爲「接受EULA」用戶組的成員。 – Damon