基于位置的重定向的HTTP状态代码

时间:2012-06-22 20:33:55

标签: http redirect http-status-codes http-redirect

我有一个网页,当登陆时,会检测用户的物理位置,然后将其重定向到最适合用户的页面。

此重定向应使用什么HTTP状态代码?

3 个答案:

答案 0 :(得分:1)

如果请求者使用的URI允许他们在没有重定向的情况下结束同一个地方,那么303有意义(as sjstrutt answered)因为他们应该使用新位置的URI。如果没有,302对我来说是有意义的,因为他们继续使用Request-URI用于将来的请求,因为您将把它们重定向到缺少他们可能请求的URI的位置。

关于302状态代码w3.org所说的内容:

  

10.3.3 302找到了

     

请求的资源暂时驻留在不同的URI下。   由于重定向有时可能会改变,客户端应该这样做   继续使用Request-URI用于将来的请求。此响应是   如果由Cache-Control或Expires标头指示,则仅可缓存   字段。

     

临时URI应该由位置字段给出   响应。除非请求方法是HEAD,否则是实体   响应应该包含一个带有超链接的短超文本注释   新的URI。

     

如果收到302状态代码以响应除以外的请求   GET或HEAD,用户代理不得自动重定向   除非可以由用户确认,否则请求,因为这可能   改变发出请求的条件。

     

...

强调我的。

顺便说一句:CodeIgniter的redirect()函数默认为302,但提到301可能会用于搜索引擎重定向。显然这是他们的决定,但我认为我会把它放到混合中,因为它是一个广泛使用的Web框架,我认为他们已经考虑了它。

答案 1 :(得分:1)

成功进行内容协商的相应响应状态代码为301302307,具体取决于重定向是永久性还是仅是临时性的。

但无论如何,服务器驱动的协商应始终说明决策所基于的信息。在HTTP中,它是 Vary 响应头字段,它指定在此过程中使用的请求头字段列表。

不幸的是,客户端的IP地址(我猜你将这些地址转换为地理定位信息)不是一个选择。因此,永久重定向也不是一种选择,除非您指明响应不被缓存,否则它可能被客户端或中间代理缓存。所以我要么使用302或307。

答案 2 :(得分:-2)

我认为HTTP 303可能是这种情况下最合适的状态代码,尽管它可能与HTTP 1.1之前的客户端不兼容。

HTTP 303状态代码状态(注意:我加粗了我觉得最重要的部分): 可以在不同的URI下找到对请求的响应,并且应该使用该资源上的GET方法检索。此方法主要用于允许输出POST激活的脚本来重定向用户代理到选定的资源。 新URI不是最初请求的资源的替代引用。 303响应绝不能被缓存,但对第二个(重定向)请求的响应可能是可缓存的。