我有一个网页,当登陆时,会检测用户的物理位置,然后将其重定向到最适合用户的页面。
此重定向应使用什么HTTP状态代码?
答案 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)
成功进行内容协商的相应响应状态代码为301,302或307,具体取决于重定向是永久性还是仅是临时性的。
但无论如何,服务器驱动的协商应始终说明决策所基于的信息。在HTTP中,它是 Vary 响应头字段,它指定在此过程中使用的请求头字段列表。
不幸的是,客户端的IP地址(我猜你将这些地址转换为地理定位信息)不是一个选择。因此,永久重定向也不是一种选择,除非您指明响应不被缓存,否则它可能被客户端或中间代理缓存。所以我要么使用302或307。
答案 2 :(得分:-2)
我认为HTTP 303可能是这种情况下最合适的状态代码,尽管它可能与HTTP 1.1之前的客户端不兼容。
HTTP 303状态代码状态(注意:我加粗了我觉得最重要的部分): 可以在不同的URI下找到对请求的响应,并且应该使用该资源上的GET方法检索。此方法主要用于允许输出POST激活的脚本来重定向用户代理到选定的资源。 新URI不是最初请求的资源的替代引用。 303响应绝不能被缓存,但对第二个(重定向)请求的响应可能是可缓存的。