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

时间:2010-06-18 05:56:39

标签: ajax url browser

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

  1. 根据标准,是否应将#hello事件发送到网络服务器?
  2. 现代浏览器如何运作?
  3. 更新:请不要忽略第一个问题。

3 个答案:

答案 0 :(得分:14)

这个问题的答案类似于/ questions / 774136的答案。 基本上,根据标准@ faqs.org/rfcs/rfc1808.html(参见第2.4.1节),它说:“”请注意,片段标识符不被视为URL的一部分。“ 正如“stephbu”所指出的那样,“锚标记永远不会被任何浏览器作为HTTP请求的一部分发送,它只在浏览器中本地解释”。

答案 1 :(得分:7)

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

例如,来自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变量

访问此参数

答案 2 :(得分:1)

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