是否将 URL 的锚点部分发送到 Web 服务器?

Posted

技术标签:

【中文标题】是否将 URL 的锚点部分发送到 Web 服务器?【英文标题】:Is the anchor part of a URL being sent to a web server? 【发布时间】:2011-03-05 07:03:32 【问题描述】:

说,有一个 URL,http://www.example.com/#hello

    #hello 是否会根据标准发送到 Web 服务器? 现代浏览器如何运作?

【问题讨论】:

【参考方案1】:

锚点部分(# 之后)不会发送到 php 中的任何 $_SERVER 变量。我不知道是否有办法从 URL 中检索该信息(据我所知,这是不可能的)。浏览器应该只使用它来查找页面中的位置,这就是为什么如果单击这样的锚,页面不会重新加载:<a href="#hello">hello</a>

【讨论】:

【参考方案2】:

哈希变量根本不会发送到网络服务器。

例如,来自 Firefox 的对 http://www.whatismyip.org/#test 的请求会发送以下 HTTP 请求包

GET / HTTP/1.1
Host: www.whatismyip.org
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Cache-Control: max-age=0

您会发现 # 无处可寻。 您看到的使用 # 作为导航形式的页面是通过 javascript 进行的。 此参数可通过window.location.hash 变量访问

【讨论】:

据我所知,没有浏览器将 URL 的 #hash 部分传输到服务器。【参考方案3】:

这个问题的答案类似于Retrieving anchor link in URL for ASP.NET的答案。

基本上,根据 RFC 1808 - Relative Uniform Resource Locators 的标准(参见第 2.4.1 节),它说:

“请注意,片段标识符不被视为 URL 的一部分。”

作为stephbu pointed out,“任何浏览器都不会将锚标记作为HTTP请求的一部分发送。它只会在浏览器中本地解释”。

【讨论】:

以上是关于是否将 URL 的锚点部分发送到 Web 服务器?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Java 中的锚启动文件协议 URL?

如何判断页面是不是已跳转到 javascript 中的锚点 (#)?

jQuery:将href推送到另一个锚点,多次并分别

thinkphp怎么跳转到指定页面的锚点

Javascript/jQuery - 使用正则表达式解析字符串中的主题标签,URL 中的锚点除外

去掉浏览器中的锚点#号