2010-05-11 120 views
2

我正在編寫一個控制器助手,爲我的REST控制器操作設置正確的響應標頭。它被粘貼到下面,並且應該被簡化爲讓那些不熟悉Zend Framework的人理解我在做什麼。這些REST HTTP響應代碼是否正確,以及Content-Type?

我的問題是:這些代碼是否正確,各自的回答是否正確?在「拒絕訪問」的情況下,我是否使用401或403?

另外,如果發生錯誤,我明白我應該在響應主體中放置一條消息,但是應該將「Content-Type」設置爲「text/plain」嗎?

<?php 

class App_Controller_Helper_RestResponse extends Zend_Controller_Action_Helper_Abstract 
{ 
    public function denied() 
    { 
     // 403 or 401? 
    } 

    public function notFound() 
    { 
     // 404 
    } 

    public function created() 
    { 
     // 201 
    } 

    public function deleted() 
    { 
     // 204 
    } 


    public function redirect() 
    { 
     // 301 
     // new url 
    } 

    public function malformed() 
    { 
     // 400 
    } 

    public function gone() 
    { 
     // 410 
    } 


} 

回答

0

那些看起來很對我好,我傾向於使用200刪除了,但我看不出什麼毛病,使用204,如果你永遠也不會當你處理刪除發回的任何實體。關於401對403,他們很棘手,因爲他們名字很差。 401表示「未經授權」,但是發送WWW-Authenticate標頭的要求暗示了當請求不是「Authenticated」時應該真正使用它。 401表示:「我不能讓你這麼做,因爲我不滿意我對你的瞭解足夠多,另一方面,403表示資源是」禁止「的,只是在這種情況下表示」未經授權「的另一種方式,沒有任何努力讓用戶得到比以前更好的認證,當你需要表達時使用403:「我知道你是誰,我不在乎,我不打算讓你這樣做。」

否則,這些看起來不錯,但您可能想考慮302,303和307作爲額外的重定向,具體取決於您爲什麼要重定向。請再看看http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html,並讓我知道是否需要更多關於重定向標題

+0

好吧,如果用戶沒有登錄(已驗證),那麼我應該重定向他們到一個登錄頁面。如果他們已經登錄並嘗試訪問他們沒有授權的資源,我應該回應一個403.聽起來不錯? – talentedmrjones 2010-05-12 23:36:05

+0

是的,如果他們還沒有登錄,發送一個401 WWW-Authenticate標頭指向登錄頁面。如果他們登錄了,他們正在做一些你不想讓他們做的事情,那就發送403。 – stinkymatt 2010-05-14 19:51:38