URL: 统一资源定位系统(uniform resource locator;URL)是因特网的万维网服务程序上用于指定信息位置的表示方法。
一个完整的URL包括: 协议部分、域名部分、端口部分、虚拟目录部分、文件名部分、参数部分、锚部分 例子: https://blog.csdn.net/weixin_42752574/article/details/102828981?src=1321&ID=24618&page=1#position1
该URL的协议部分为“https:”,这代表网页使用的是HTTPS协议。在Internet中可以使用多种协议,如HTTP,HTTPS,FTP等,后面的“//”为分隔符
该URL的域名部分为“blog.csdn.net”。一个URL中,也可以使用IP地址作为域名
跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口80
从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/weixin_42752574/article/details/”
从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“102828981”。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名
从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“?src=1321&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。
HTTP请求不包括锚部分,从“#”开始到最后,都是锚部分。本例中的锚部分是“position1“。锚部分也不是一个URL必须的部分。 锚点作用:打开用户页面时滚动到该锚点位置。
为网页位置指定标识符,有两个方法。 一是使用锚点,比如<a name="test"></a>, 二是使用id属性,比如<div id="test" > 这个时候url上如果有#test,页面就会跳到对应元素位置
hash 属性是一个可读可写的字符串,该字符串是 URL 的锚部分(从 # 号开始的部分) #代表网页中的一个位置。其右面的字符,就是该位置的标识符。比如, 比如 https://blog.csdn.net/weixin_42752574/article/details/102852861#URL_26 就代表网页URL_26位置。浏览器读取这个URL后,会自动将print位置滚动至可视区域。(单页应用)
#是用来指导浏览器动作的,对服务器端完全无用。所以,HTTP请求中不包括#。 比如,访问下面的网址, https://blog.csdn.net/weixin_42752574/article/details/102852861#URL_26 浏览器实际发出的请求是这样的: 可以看到,只是请求URL里没有"#URL_26"的
在第一个#后面出现的任何字符,都会被浏览器解读为位置标识符。这意味着,这些字符都不会被发送到服务器端。 比如,下面URL的原意是带上一个color参数,值为#fff:
https://blog.csdn.net/weixin_42752574/article/details/102852861?color=#fff
但是,浏览器实际发出的请求是: 可以看到,"#fff"被省略了。只有将#转码为%23,浏览器才会将其作为实义字符处理。也就是说,上面的网址应该被写成:
https://blog.csdn.net/weixin_42752574/article/details/102852861?color=%23fff
单单改变#后的部分,浏览器只会滚动到相应位置,不会重新加载网页。
比如,从
https://blog.csdn.net/weixin_42752574/article/details/102852861
改成
https://blog.csdn.net/weixin_42752574/article/details/102852861#URL_14
浏览器不会重新向服务器请求该地址。
每一次改变#后的部分,都会在浏览器的访问历史中增加一个记录,使用"后退"按钮,就可以回到上一个位置。
这对于ajax应用程序特别有用,可以用不同的#值,表示不同的访问状态,然后向用户给出可以访问某个状态的链接。
值得注意的是,上述规则对IE 6和IE 7不成立,它们不会因为#的改变而增加历史记录。
window.location.hash这个属性可读可写。读取时,可以用来判断网页状态是否改变;写入时,则会在不重载网页的前提下,创造一条访问历史记录。
这是一个HTML 5新增的事件,当#值发生变化时,就会触发这个事件。IE8+、Firefox 3.6+、Chrome 5+、Safari 4.0+支持该事件。
它的使用方法有三种:
window.onhashchange = func;
<body οnhashchange=“func();”>
window.addEventListener(“hashchange”, func, false);
对于不支持onhashchange的浏览器,可以用setInterval监控location.hash的变化。
默认情况下,Google的网络蜘蛛忽视URL的#部分。
但是,Google还规定,如果你希望Ajax生成的内容被浏览引擎读取,那么URL中可以使用"#!",Google会自动将其后面的内容转成查询字符串_escaped_fragment_的值。
比如,Google发现新版twitter的URL如下:
http://twitter.com/#!/username
就会自动抓取另一个URL:
http://twitter.com/?escaped_fragment=/username
通过这种机制,Google就可以索引动态的Ajax内容。