URL组成以及hash属性

mac2025-03-24  11

URL组成以及hash属性

URL组成URL--协议部分URL--域名部分URL--端口部分URL--虚拟目录部分URL--文件名部分URL--参数部分URL--锚部分 URL--#(hash)详解#的含义HTTP请求不包括##后的字符改变#不触发网页重载改变#会改变浏览器的访问历史window.location.hash读取#值window.onhashchange事件Google抓取#的机制

URL组成

URL: 统一资源定位系统(uniform resource locator;URL)是因特网的万维网服务程序上用于指定信息位置的表示方法。

一个完整的URL包括: 协议部分、域名部分、端口部分、虚拟目录部分、文件名部分、参数部分、锚部分 例子: https://blog.csdn.net/weixin_42752574/article/details/102828981?src=1321&ID=24618&page=1#position1

URL–协议部分

该URL的协议部分为“https:”,这代表网页使用的是HTTPS协议。在Internet中可以使用多种协议,如HTTP,HTTPS,FTP等,后面的“//”为分隔符

URL–域名部分

该URL的域名部分为“blog.csdn.net”。一个URL中,也可以使用IP地址作为域名

URL–端口部分

跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口80

URL–虚拟目录部分

从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/weixin_42752574/article/details/”

URL–文件名部分

从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“102828981”。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名

URL–参数部分

从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“?src=1321&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。

URL–锚部分

HTTP请求不包括锚部分,从“#”开始到最后,都是锚部分。本例中的锚部分是“position1“。锚部分也不是一个URL必须的部分。 锚点作用:打开用户页面时滚动到该锚点位置。

为网页位置指定标识符,有两个方法。 一是使用锚点,比如<a name="test"></a>, 二是使用id属性,比如<div id="test" > 这个时候url上如果有#test,页面就会跳到对应元素位置

URL–#(hash)详解
#的含义

hash 属性是一个可读可写的字符串,该字符串是 URL 的锚部分(从 # 号开始的部分) #代表网页中的一个位置。其右面的字符,就是该位置的标识符。比如, 比如 https://blog.csdn.net/weixin_42752574/article/details/102852861#URL_26 就代表网页URL_26位置。浏览器读取这个URL后,会自动将print位置滚动至可视区域。(单页应用)

HTTP请求不包括#

#是用来指导浏览器动作的,对服务器端完全无用。所以,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读取#值

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

window.onhashchange事件

这是一个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抓取#的机制

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

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

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

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

就会自动抓取另一个URL:

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

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

最新回复(0)