答案 0 :(得分:56)
我会说 303见其他 302发现:
在我看来,请求的资源暂时驻留在不同的URI下。由于重定向有时可能会被更改,因此客户端应该继续将Request-URI用于将来的请求。如果由Cache-Control或Expires标头字段指示,则此响应仅可缓存。
最贴近登录页面。我最初认为303 see other
也可以。经过一番思考后,我会说302 Found
更合适,因为找到了所需的资源 ,在访问它之前只有另一个页面要经过。默认情况下,响应不会被缓存,这也很好。
答案 1 :(得分:45)
这是滥用HTTP重定向机制。如果用户未获得授权,则您的应用必须返回401 Unauthorized
。如果用户已获得授权但无权访问所请求的资源,则必须返回403 Forbidden
。
您应该在客户端进行重定向,例如通过javascript。 重定向的状态代码,因为不存在所需的授权。使用30x不符合HTTP。
How to Think About HTTP Status Codes by Mark Nottingham
401 Unauthorized触发HTTP的请求认证机制。
401 Unauthorized
状态代码需要存在支持各种身份验证类型的WWW-Authenticate
标头:
WWW-Authenticate:< type>境界= LT;境界>
Bearer,OAuth,Basic,Digest,Cookie等
答案 2 :(得分:12)
我认为适当的解决方案是HTTP 401(未授权)标头。
http://en.wikipedia.org/wiki/HTTP_codes#4xx_Client_Error
这个标题的目的就是这个。但是,不是重定向到登录页面,而是正确的过程如下:
这是一个很好的做法,例如提供有用的404页面,站点地图链接和搜索表单。
见。
答案 3 :(得分:-2)
我很少见Firefox浏览器缓存302重定向。这就是我使用307登录页面的原因,例如重定向到最新文章/帖子/评论/等。
如果您使用302,请不要忘记仔细检查是否禁用了缓存:
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-cache');
header('Pragma: no-cache');
header('Cache-Control: post-check=0, pre-check=0', false);