【问题标题】:Force browser to drop #hash from the URL when sending redirect发送重定向时强制浏览器从 URL 中删除#hash
【发布时间】:2015-01-04 14:55:16
【问题描述】:

我遇到了与 URL 的持久部分有关的问题,我们称它为 #x,用于导航。我在服务器端有一个 AuthenticationFilter,它将用户重定向到登录页面。问题是我不能让这个#x 消失。在服务器端,当我单步执行执行重定向的 Java 代码时,我看到 URL 为/login?redirectUrl=%2Fprevious%2Flocation。然而,在客户端这实际上是/login?redirectUrl=%2Fprevious%2Flocation#x。我知道这些数据实际上从未发送到服务器。我的问题是如何强制服务器告诉客户端放弃它?我必须切换到客户端重定向吗?

【问题讨论】:

    标签: java http url web jetty


    【解决方案1】:

    这里有几个问题可以回答这个问题 - URL hash is persisting between redirects。我最终做了一个客户端重定向以避免这个问题。

    【讨论】:

    • 如果您在302 redirect 中发送不同的#bookmark,则浏览器可能会使用它。请参阅链接问题中的第二个答案。
    【解决方案2】:

    哈希永远不会发送到服务器。所以如果你请求一个像 example.org/my-account-overview#profile 服务器仅作为请求的资源获取 url example.org/my-account-overview

    如果您改为发送重定向,浏览器应该请求新的 url,并在哈希本身之后自动添加哈希和值。

    【讨论】:

      【解决方案3】:

      很可能是您浏览器端的一些 javascript 实际上添加了 #x,您需要在浏览器端修复它。

      要验证这一点,请使用浏览器检查工具 + 网络选项卡查看浏览器和服务器发送的实际请求 + 响应标头。

      如果服务器发送类似302 Redirect 的内容,它的响应Location 标头将包含它希望浏览器使用的URI。如果该 URI 不包含 #x,那么您知道浏览器本身正在添加 #x

      虽然服务器可以在其Location 响应标头中发送#x,但浏览器永远不会将其发送回服务器。

      【讨论】:

        猜你喜欢
        • 2013-07-27
        • 1970-01-01
        • 2016-07-22
        • 2019-08-03
        • 1970-01-01
        • 2011-03-01
        • 2013-04-27
        • 2011-12-05
        • 2013-03-09
        相关资源
        最近更新 更多