2013-03-26 45 views
4

我有一個RESTful資源,其表示只能由經過身份驗證的客戶端檢索。在未經身份驗證的客戶端發出GET請求的情況下,將返回401。使用HEAD請求顯示受保護資源的存在是否RESTful?

另一方面,我希望未經身份驗證的客戶端能夠確定資源是否存在。在這種情況下,我正在考慮如果資源確實存在,則HEAD請求會返回200;如果不存在,則返回404。

RFC 2616說,大約HEAD請求在第9.4節

以下的響應於HEAD請求包含在HTTP報頭的元信息應該是相同的,以響應於GET請求發送的信息。

這種方法會被認爲是正確的RESTful嗎?

作爲一種替代方案,我可以讓GET和HEAD請求返回404以獲得不存在的資源,如果請求存在但客戶端沒有資格,則返回401。

回答

3

我會去404/401路線。它更簡單,更正交。並且還因爲HEAD定義的第一行如下所示:

HEAD方法與GET相同,除了服務器不能在響應中返回消息體。

而這會爲不支持HEAD的HTTP客戶端開放。未經驗證的他們可以簡單地執行GET來確定資源的存在。不需要HEAD支持。

+0

我認爲這個共識非常清楚,rfc證明了這一點。 – tremoloqui 2013-03-27 18:43:47

3

如果您真的要允許未經身份驗證的客戶端確定資源的存在,我會選擇後者(404不存在,401未認證)。如果存在這些信息,404/401是正確的答案:

  • 404:我向您確認,未經身份驗證的客戶端,此資源不存在。
  • 401:我拒絕您的請求,因爲您沒有獲取此資源的適當授權。

此外,這允許經過身份驗證的客戶端爲200的資源頭部,如果他們有適當的訪問權限並且存在。