重定向到登录页面时,什么是正确的HTTP状态代码?

时间:2010-05-15 09:17:57

标签: http redirect http-status-codes

4 个答案:

答案 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

这个标题的目的就是这个。但是,不是重定向到登录页面,而是正确的过程如下:

  • 未登录用户尝试访问登录限制页面。
  • 系统识别用户未被记录
  • 系统返回HTTP 401标头,并在同一响应中显示登录表单(不是重定向)。

这是一个很好的做法,例如提供有用的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);