2009-07-15 79 views
1

我有一個使用RESTful url模式的web應用程序。目前,如果用戶試圖訪問他們需要進行身份驗證的頁面,它只會返回任何內容。在這種情況下返回HTTP狀態代碼是否是一種好的做法?我會使用403還是不同的?需要驗證的內容的REST http狀態碼?

+0

REST與URI模式無關。 「REST風格的網址模式」完全是無稽之談。我懷疑你的API只是RPC。 – aehlke 2009-07-22 19:42:00

回答

3

您應該使用HTTP狀態碼發送響應。

我不會派一個403禁止回來,雖然作爲該規範規定了這個狀態代碼:

服務器理解了請求,但 拒絕執行它。 授權不會幫助和 請求不應該重複

返回401未授權狀態代碼,而不是。看到這個更多信息的狀態代碼:

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

我這樣做與新澤西的方法是發送與狀態的響應,然後包括其中包含人類可讀的消息的字符串實體,例如

Response response = Response.status(Status.PRECONDITION_FAILED).entity(
        new String("Incorrect " + id + " [" + id + "]")).build(); 

這會顯示給客戶端。我拋出了一個包裝這個響應的Jersey WebApplicationException。

+0

感謝喬恩,這是最有幫助的。 – 2009-07-15 20:19:21

1

如果他們沒有權限返回401給他們機會迴應認證挑戰或403如果你不想讓他們。

Restlet 1.1向前返回403,而早期版本返回401。403似乎被認爲更正確,如果不一定更有幫助。

0

這要看。當然,你真的應該回報一些東西,只是爲了獲得體面的客戶體驗。如果您想讓他們有機會在此時進行身份驗證,則可以返回401,並且客戶端將知道使用標準身份驗證來傳遞憑據。但是,如果您希望通過某種其他機制進行身份驗證(某些登錄URL,然後設置cookie或其他機制),則返回403可能是一種方法。

0

lol ...在REST API實現中,我剛剛構建了一個響應體,它返回一個401狀態碼,該響應體讀取「再見」。是與API交互的人抱怨的第一件事。我仍然認爲「再見」這樣說; )