我们的前端人员需要形成一个包含哈希值的网址(即http://blah/#some-link。)。当我们在浏览器上点击这个并使用fiddler检查http流量时,我们看到blah /之后的所有内容都被删除了,所以请求真的只是http://blah/。我们还在我们的服务器eclipse调试日志中确认了这一点。
Spring安全性将请求重定向到正确的登录页面(因为用户尚未登录),但浏览器上的url现在显示:http://blah/some-link(散列被删除)但浏览器上的url应该是http://blah/log-in。
知道为什么会这样吗?任何修复或解决方法?提前致谢。
#
之后的URI部分称为fragment
:
URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
Scheme和hier-part标识文档的位置,片段帮助浏览器识别该文档中的位置。
片段在作为请求的一部分发送之前由客户端软件从URI中剥离。
来自RFC3986:
片段标识符未在特定于方案中使用 处理URI;相反,片段标识符是分开的 从取消引用之前的其余URI开始,从而得到 识别片段本身内的信息被解除引用 完全由用户代理,不管URI方案。虽然 这种单独的处理通常被认为是一种损失 信息,特别是对于引用的准确重定向 资源随着时间的推移而移动,它也有助于防止信息 拒绝参考作者的提供者有权参考 资源中的信息有选择地。
根据HTTP规范,#
之后的内容仅用于客户端。如果您需要服务器上的信息,您可以使用不同的分隔符,也可以在页面加载后通过ajax通过javascript在客户端上读取它来提交。
URI中包含和在散列(#)之后的部分永远不会作为HTTP请求的一部分发送到服务器。
原因是哈希标识符最初设计为指向给定网页内的引用而不是服务器上的新资源。
如果要获取哈希标识符,则必须使用一些客户端JavaScript来获取值并使用表单提交。
在IE9,IE10或IE11中单击后退按钮时,将从URL中删除Hashmark
在IE10中,第一次单击HREF链接会导致以下正确的URL:http://www.example.com/yy/zz/ff/paul.html#20007_14
如果再次单击后退按钮,则会显示以下URL:http://www.example.com/yy/zz/ff/paul.html
方案:
请使用https更改网址
这个对我有用
你可以用javascript做到这一点
<script>
if(window.location.hash) {
console.log(window.location.hash);
window.location.hash = window.location.hash;
}
</script>