【发布时间】:2012-06-25 04:42:39
【问题描述】:
我有一个网页,当登陆时,它会检测用户的实际位置,然后将他们重定向到最适合用户的页面。
此重定向应使用什么 HTTP 状态代码?
【问题讨论】:
标签: http redirect http-status-codes http-redirect
我有一个网页,当登陆时,它会检测用户的实际位置,然后将他们重定向到最适合用户的页面。
此重定向应使用什么 HTTP 状态代码?
【问题讨论】:
标签: http redirect http-status-codes http-redirect
我相信 HTTP 303 可能是最适合这种情况的状态代码,尽管它可能与 HTTP 1.1 之前的客户端不兼容。
HTTP 303 状态代码指出(注意:我已将我认为最重要的部分加粗): 可以在不同的 URI 下找到对请求的响应,并且应该在该资源上使用 GET 方法检索。此方法的存在主要是为了允许 POST 激活脚本的输出重定向用户代理到选定的资源。 新的 URI 不是原始请求资源的替代引用。 303 响应不得缓存,但对第二个(重定向)请求的响应可能是可缓存的。
【讨论】:
如果有一个可供请求者使用的 URI,可以让他们在没有重定向的情况下到达同一个地方,那么 303 是有意义的 (as sjstrutt answered),因为他们应该使用新位置的 URI。如果没有,302 对我来说是有意义的,因为他们应该继续使用 Request-URI 来处理未来的请求,因为您随后会将他们重定向到缺少他们本来可以请求的 URI 的位置。
这是w3.org 所说的关于 302 状态代码的内容:
10.3.3 302 找到
请求的资源暂时位于不同的 URI 下。 由于重定向有时可能会改变,客户端应该 继续使用 Request-URI 来处理未来的请求。此响应是 仅在 Cache-Control 或 Expires 标头指示时可缓存 字段。
临时 URI 应该由 回复。除非请求方法是 HEAD,否则 响应应该包含一个简短的超文本注释,其中包含指向 新的 URI。
如果收到 302 状态代码以响应请求,而不是 GET 或 HEAD,用户代理不能自动重定向 请求,除非它可以被用户确认,因为这可能 更改发出请求的条件。
...
强调我的。
顺便说一句:CodeIgniter 的 redirect() 函数默认为 302,但提到 301 可能用于搜索引擎重定向。显然这是他们的决定,但我认为我会将其加入其中,因为它是一个广泛使用的 Web 框架,我认为他们已经对此进行了一些思考。
【讨论】: