我正在编写一个控制器助手,为我的REST控制器操作设置正确的响应头。它粘贴在下面,应该简化到那些不熟悉Zend Framework的人来理解我在做什么。
我的问题是:这些代码是否适用于各自的回复,而在“拒绝访问”的情况下,我使用的是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 :(得分:0)
对我来说看起来很不错,我倾向于使用200来删除,但是如果你在处理删除时永远不会发回任何实体,我认为使用204没有任何问题。关于401 vs 403,它们很棘手,因为它们的名字很差。 401表示“未经授权”,但发送WWW-Authenticate标头的要求告诉我,当请求未经“认证”时,应该真正使用它。 401说:“我不能让你这样做,因为我不满意,我对你了解得足够多。另一方传达403的资源是”禁止的“,只是在这种情况下说”未授权“的另一种方式,我们没有努力让用户更好地进行身份验证。当你需要表达时,请使用403:“我知道你是谁,我不在乎,我不会让你那么做。”
否则这些看起来不错,但您可能需要将302,303和307视为额外的重定向,具体取决于您进行重定向的原因。请进一步了解http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html,如果您需要更深入了解重定向标题,请与我们联系。