什么时候到401 vs 302到302

时间:2014-04-08 17:50:20

标签: ruby-on-rails rest httpresponse functional-testing http-response-codes

我正在开发基于Rails REST的网站,并正在为控制器编写功能测试。作为基于REST的应用程序,我使用了几个HTTP动词,GETPOSTPUTDELETE等。

我注意到我在申请匿名用户的401和302 HTTP响应代码时不一致。有时,当他们请求需要身份验证的资源时,我会返回401 Unauthorized。其他时候,我返回302并将它们重定向到登录页面。

我应该遵循标准吗?什么时候应该使用401?我什么时候应该重定向到登录页面?例如,

  • 是否应重定向GETs
  • POSTs应该401吗?
  • 对于不遵循302的AJAX请求,该怎么办?

或许这只是意见问题,我需要自己选择和执行的约定。

2 个答案:

答案 0 :(得分:4)

当我阅读RFC时,未经身份验证的用户请求需要身份验证的资源应始终收到401 Unauthorized。来自RFC:

302 Found:请求的资源暂时驻留在不同的URI下。

401 Unauthorized:请求需要用户身份验证。

显然,302无法正确描述您的情况,401会这样做。

答案 1 :(得分:1)

我不知道搜索引擎是否会将 401 页面编入索引。

理想情况下,对于未经身份验证的用户的受限页面: 401 状态码并显示登录表单。

对于仍然不允许的已验证用户: 403 和“未授权”页面。

对于登录页面: 200 OK 并显示登录表单。