浏览器会自动删除URL中的#吗?

时间:2012-02-21 20:05:16

标签: url hash

我们的前端人员需要形成一个包含哈希值的网址(即http://blah/#some-link。)当我们在浏览器上点击此内容并使用fiddler检查http流量时,我们看到了删除/删除后的所有内容,所以请求实际上只是http://blah/。我们还在我们的服务器eclipse调试日志中确认了这一点。

Spring安全性将请求重定向到正确的登录页面(因为用户尚未登录),但浏览器上的url现在显示: http://blah/some-link(哈希被删除)但浏览器上的网址应该是http://blah/log-in

知道为什么会这样吗?任何修复或解决方法?提前谢谢。

5 个答案:

答案 0 :(得分:5)

#之后的URI部分称为fragment

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

Scheme和hier-part标识文档的位置,片段可帮助浏览器识别此文档中的位置。

在作为请求的一部分发送片段之前,客户端软件会从URI中剥离片段。

来自RFC3986

  

片段标识符未在特定于方案的中使用   处理URI;相反,片段标识符是分开的   从取消引用之前的其余URI开始,从而得到   识别片段本身内的信息被解除引用   完全由用户代理,不管URI方案。虽然
  这种单独的处理通常被认为是一种损失   信息,特别是对于参考文献的准确重定向   资源随着时间的推移而变化,也有助于防止信息发生   拒绝参考作者的提供者有权参考   有选择地在资源中的信息。

答案 1 :(得分:3)

根据HTTP规范,#之后的内容仅在客户端使用。如果您需要服务器上的信息,您可以使用不同的分隔符,也可以在页面加载后通过ajax通过javascript在客户端上读取它来提交。

答案 2 :(得分:0)

作为HTTP请求的一部分,URI中包含和在散列(#)之后的部分永远不会发送到服务器。

原因是哈希标识符最初设计为指向给定网页内的引用而不是服务器上的新资源。

如果您想获取哈希标识符,则必须使用一些客户端JavaScript来获取值并使用表单提交。

答案 3 :(得分:0)

在IE9,IE10或IE11中单击后退按钮时,会从URL中删除Hashmark

在IE10中,第一次单击HREF链接会导致以下正确的URL: http://www.example.com/yy/zz/ff/paul.html#20007_14

如果再次点击后退按钮,则会显示以下网址: http://www.example.com/yy/zz/ff/paul.html

解决方案:

请使用https

更改网址

它对我有用

答案 4 :(得分:0)

您可以使用javascript

 <script>
 if(window.location.hash) {
    console.log(window.location.hash); 
    window.location.hash = window.location.hash;
 } 
</script>