发送重定向时强制浏览器从 URL 中删除#hash
Posted
技术标签:
【中文标题】发送重定向时强制浏览器从 URL 中删除#hash【英文标题】:Force browser to drop #hash from the URL when sending redirect 【发布时间】:2015-01-04 14:55:16 【问题描述】:我遇到了与 URL 的持久部分有关的问题,我们称它为 #x
,用于导航。我在服务器端有一个 AuthenticationFilter,它将用户重定向到登录页面。问题是我不能让这个#x
消失。在服务器端,当我单步执行执行重定向的 Java 代码时,我看到 URL 为/login?redirectUrl=%2Fprevious%2Flocation
。然而,在客户端这实际上是/login?redirectUrl=%2Fprevious%2Flocation#x
。我知道这些数据实际上从未发送到服务器。我的问题是如何强制服务器告诉客户端放弃它?我必须切换到客户端重定向吗?
【问题讨论】:
【参考方案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
,但浏览器永远不会将其发送回服务器。
【讨论】:
以上是关于发送重定向时强制浏览器从 URL 中删除#hash的主要内容,如果未能解决你的问题,请参考以下文章
在未登录浏览器连接 Instagram 时,OAuth Instagram API 删除重定向 URL 中的参数