【问题标题】:HTTP Status Code for Location-Based Redirect基于位置的重定向的 HTTP 状态码
【发布时间】:2012-06-25 04:42:39
【问题描述】:

我有一个网页,当登陆时,它会检测用户的实际位置,然后将他们重定向到最适合用户的页面。

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 实际上,您应该将文本的完全相反部分加粗:“此方法的存在主要是为了允许 POST 激活脚本的输出将用户代理重定向到选定的资源。”跨度>
    【解决方案2】:

    如果有一个可供请求者使用的 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 框架,我认为他们已经对此进行了一些思考。

    【讨论】:

      【解决方案3】:

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

      但在任何情况下,服务器驱动的协商都应始终说明决策所基于的信息。在 HTTP 中,Vary 响应头字段指定了在此过程中使用的请求头字段列表。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-09
        • 1970-01-01
        • 2019-08-26
        • 2014-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多