强制浏览器在发送重定向时从URL中删除#hash

时间:2014-11-07 18:22:13

标签: java http url web jetty

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

3 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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