url中#(hash)的含义

转载 2015年08月26日 10:55:09

hash 属性是一个可读可写的字符串,该字符串是 URL 的锚部分(从 # 号开始的部分)

1 #的涵义

#代表网页中的一个位置。其右面的字符,就是该位置的标识符。比如,

  http://www.example.com/index.html#print

就代表网页index.html的print位置。浏览器读取这个URL后,会自动将print位置滚动至可视区域。(单页应用)

为网页位置指定标识符,有两个方法。一是使用锚点,比如<a name="print"></a>,二是使用id属性,比如<div id="print" >。

2 HTTP请求不包括#

#是用来指导浏览器动作的,对服务器端完全无用。所以,HTTP请求中不包括#。

比如,访问下面的网址,

  http://www.example.com/index.html#print

浏览器实际发出的请求是这样的:

  GET /index.html HTTP/1.1

  Host: www.example.com

可以看到,只是请求index.html,根本没有"#print"的部分。

3 #后的字符

在第一个#后面出现的任何字符,都会被浏览器解读为位置标识符。这意味着,这些字符都不会被发送到服务器端。

比如,下面URL的原意是指定一个颜色值:

  http://www.example.com/?color=#fff

但是,浏览器实际发出的请求是:

  GET /?color= HTTP/1.1

  Host: www.example.com

可以看到,"#fff"被省略了。只有将#转码为%23,浏览器才会将其作为实义字符处理。也就是说,上面的网址应该被写成:

  http://example.com/?color=%23fff

4 改变#不触发网页重载

单单改变#后的部分,浏览器只会滚动到相应位置,不会重新加载网页。

比如,从

  http://www.example.com/index.html#location1

改成

  http://www.example.com/index.html#location2

浏览器不会重新向服务器请求index.html。

5 改变#会改变浏览器的访问历史

每一次改变#后的部分,都会在浏览器的访问历史中增加一个记录,使用"后退"按钮,就可以回到上一个位置。

这对于ajax应用程序特别有用,可以用不同的#值,表示不同的访问状态,然后向用户给出可以访问某个状态的链接。

值得注意的是,上述规则对IE 6和IE 7不成立,它们不会因为#的改变而增加历史记录。

6 window.location.hash读取#值

window.location.hash这个属性可读可写。读取时,可以用来判断网页状态是否改变;写入时,则会在不重载网页的前提下,创造一条访问历史记录。

7 onhashchange事件

这是一个HTML 5新增的事件,当#值发生变化时,就会触发这个事件。IE8+、Firefox 3.6+、Chrome 5+、Safari 4.0+支持该事件。

它的使用方法有三种:

  window.onhashchange = func;

  <body onhashchange="func();">

  window.addEventListener("hashchange", func, false);

对于不支持onhashchange的浏览器,可以用setInterval监控location.hash的变化。

8 Google抓取#的机制

默认情况下,Google的网络蜘蛛忽视URL的#部分。

但是,Google还规定,如果你希望Ajax生成的内容被浏览引擎读取,那么URL中可以使用"#!",Google会自动将其后面的内容转成查询字符串_escaped_fragment_的值。

比如,Google发现新版twitter的URL如下:

  http://twitter.com/#!/username

就会自动抓取另一个URL:

  http://twitter.com/?_escaped_fragment_=/username

通过这种机制,Google就可以索引动态的Ajax内容。

Hash算法系列-具体算法(url hash)

什么是urlhash架构 url hash架构对url进行一次hash算法,然后通过hash结果找到对应的服务器。因为针对单一个url的hash结果是一样的,所以理论上这个url会被永久分配到固定的...
  • yq76034150
  • yq76034150
  • 2011年09月17日 23:24
  • 5673

获取url的hash值

获取url的hash值 location是javascript里边管理地址栏的内置对象,比如location.href就管理页面的url,用location.href=url就可以直接将页面重定向u...
  • youweiqingnian_008
  • youweiqingnian_008
  • 2016年07月14日 09:55
  • 2097

通过url中的hash(#)来记录页面状态,用以返回、跳转到特定状态

主要是通过js操作window.location.hash(可读写),加载完页面对hash进行一下判断,然后执行相应的js指令改变页面状态。 最常用的就是一个网页有多个tab,是通过js来控制相应t...
  • jupeizhong
  • jupeizhong
  • 2016年02月26日 10:28
  • 3103

hash.js Javascript/jQuery 解析/监听url hash

1、什么是hashsearch、hashpath       其实那,hashsearch、hashpath这两个词是我自造的。在javascript语言里称url改变该部分不会影响页面重新加载的部...
  • aoshilang2249
  • aoshilang2249
  • 2016年08月16日 18:18
  • 3646

将nginx配置成url_hash转发方式

将nginx配置成url_hash转发方式 开源中国 发表于 2014-09-12 20:09:01 所需软件名称及版本: pcre-8.02.tar.gz nginx-0.7.58....
  • samxx8
  • samxx8
  • 2015年07月24日 22:42
  • 5403

nginx中,ip_hash和url_hash的区别

最近看nginx的负载均衡,发现为了解决nginx的session问题,有两种方法,就是ip_hash和url_hash,ip_hash是根据ip来维持session的,而url_hash是根据url...
  • u014153701
  • u014153701
  • 2015年07月09日 11:04
  • 1962

关于url hash navigation的问题

背景:在ajax的应用中,由于页面不刷新,如果操作都在一个页面上,浏览器将不会记住每个操作的状态,这样就会产生一个问题:用户在click几次之后,想回到先前某一次click 的结果(或者直接想回去上...
  • kittaaron
  • kittaaron
  • 2012年08月13日 17:37
  • 1162

URL中#(井号)的作用

去年9月,twitter改版。 一个显著变化,就是URL加入了"#!"符号。比如,改版前的用户主页网址为   http://twitter.com/username 改版后,...
  • luka2008
  • luka2008
  • 2014年08月22日 11:30
  • 4449

设置location.hash的值,前面不要带#号,为了兼容Safari

在网页http://xxx.com//a.html#abc中alert(location.hash)得到的结果是  #abc如果想改变hash值,理所当然应该是location.hash = "#xy...
  • lenel
  • lenel
  • 2007年09月29日 11:01
  • 4436

HTML中的hash(#号)

一、#的涵义 #代表网页中的一个位置。右面的字符就是代表的位置信息:如 http://localhost:8081/cbuild/index.html#first 就代表网页index.ht...
  • limm33
  • limm33
  • 2016年03月21日 15:48
  • 3595
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:url中#(hash)的含义
举报原因:
原因补充:

(最多只允许输入30个字)