【问题标题】:Can I send a HTTP redirect to a url with an anchor?我可以将 HTTP 重定向发送到带有锚点的 url 吗?
【发布时间】:2010-11-20 00:28:35
【问题描述】:

是否可以向这样的 url 发送带有 302 状态代码的响应:

http://mysite.com/something/#somethingelse

【问题讨论】:

  • 您使用哪种语言?
  • 网络服务器?如果您使用 mod_rewrite 执行此操作,它将无法正常工作,因为 # 已转义
  • @Manni 是的,我确实尝试过,但我的代码中有错误,这就是它不起作用的原因。现在它起作用了。 @Shiraz 我正在使用 python。
  • 这是否意味着您的问题不再相关?
  • @Manni 你今天过得不好吗?

标签: http http-status-code-302


【解决方案1】:

是的,您可以使用片段标识符。这是 HTTP 规范中的一个已知错误。

http://trac.tools.ietf.org/wg/httpbis/trac/ticket/6

【讨论】:

    【解决方案2】:

    按照 HTTP 规范,Location header field 的值必须是 absoluteURI 值。那是根据RFC 3986(他们只是将名称从absoluteURI改为absolute-URI):

    absolute-URI  = scheme ":" hier-part [ "?" query ]
    

    所以理论上不允许片段作为值的一部分。但是浏览器可以处理它。

    【讨论】:

      【解决方案3】:

      严格阅读RFC2616 不允许在 Location 标头值中使用片段,因为它们不是绝对 URI 的一部分。但是,使用IETF's HTTP rewrite draftthis was fixed

      最近Julian 在 Location 标头中比较了浏览器如何处理 URI 片段(这是 HTML 锚标记处理的):http://www.greenbytes.de/tech/tc2231/redirects.html

      所以答案是:是的,您可以将片段放在 Location 标头 URI 中。

      【讨论】:

        【解决方案4】:

        在 PHP 中这样做似乎没有问题:

        Header(
            "Location: http://en.wikipedia.org/wiki/HTTP#Status_codes",
            true,
            302
        );
        

        【讨论】:

        • 我认识这个人!
        • 我想这样做,但如果我这样做,就会出现问题。如果我继续我的链接,在这种情况下我将重定向到 http://en.wikipedia.org/wiki/HTTP#Status_codes/ 并且末尾的 / 不显示锚点。我可以将锚点重命名为 Status_codes/ 我想知道是否有更好的方法来做到这一点。
        【解决方案5】:

        是的。是浏览器不将哈希发送到服务器,而不是相反。

        【讨论】:

          【解决方案6】:

          虽然原始RFC 2616 只允许absoluteURILocation 标头中,但正如其他(较旧的)答案所解释的那样,当前的RFC 7231 允许任何URI-reference,或者是完整的URI(可能包含片段),甚至是相对 URI,根据当前有效 URI 进行解析。并且它甚至明确地描述了fragment在重定向过程中的行为(如果Location header包含fragment,则使用它,如果没有,则在重定向后继承并应用原始fragment)。

          是的,你可以,现在甚至已经正式标准化了。

          【讨论】:

            猜你喜欢
            • 2018-06-22
            • 2023-03-06
            • 2014-01-05
            • 1970-01-01
            • 1970-01-01
            • 2010-11-20
            • 1970-01-01
            • 2017-01-26
            • 1970-01-01
            相关资源
            最近更新 更多