2010-05-11 90 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

相关问题