一个标准的 URL 地址由 protocol、hostname、port、path、parameters、query 几部分组成。
接下来以下面这个链接为例进行详细介绍:
http://news.qq.com/a/20160209/012154,htm?a=1&b=2&c=3
1) protocol@H_502_8@
指 http:// 部分,是协议的意思。协议就是一套规则,定义了数据的封装、打包、拆包和解释的规则,http:// 即表示只能通过 HTTP 这套规则访问这个页面资源。
大家是否还见过 https、ftp、thunder 这些协议头? URL 地址标识了一个资源,协议头表示我们可以通过不同的规则(协议)访问它。当然,前提是存放这些资源的服务器支持这个协议。
在剧院,座位可以看作资源,观众只有获取资源,才能看到剧目。过年时观众比较多,为了防止发生踩踏事件,剧院不但开放正门,还开放两个侧门。可以想象,观众的票面上,一定标识了座位的信息(几排几号),这相当于 URL 的后半部分。
有的票面标了从正门进,有的标了从侧门进,这就相当于 URL 的协议头标识了协议,一种是按走正门的规则进入,另一种是按走侧门的规则进入,观众拿着走正门的票从侧门进入,会被拒绝而无法获取资源(座位),所以采用何种协议至关重要。
前面讨论的前提都是要侧门开放,即服务器支持这种协议。如果不开放侧门,地址就是无效的,访问不到这个资源。
总之,协议头标识了访问具体资源的规则,以后大家看到不同的协议头,就想想 这个例子。当然,也可以设计一个协议,例如 abc://,这叫作自定义协议。
2) hostname@H_502_8@
hostname 称为主机名,在本例的 URL 中,news.qq.com 就是 Hostname。
可以将主机理解为一台名叫 news.qq.com 的机器,这台主机在 qq.com 域名下。qq.com 叫作 一级域名,很多人认为 www.qq.com 是一级域名,其实它只不过是一个二级域名,www 等同于刚才介绍的 news。
www.qq.com、news.qq.com、qzone.qq.com、v.qq.com 等都是二级域名。
3) port@H_502_8@
port 称为端口号,一般 HTTP 的端口号为 80,HTTPS 的为 443,可以理解为计算机有很多个提供服务的点,比如可以用默认的 80 端口来提供服务,也可以用 81 端口来提供服务。
把一个主机比喻成一间房子的话,这间房子可以有 65536 个门,门号就是端口号,这么多端口都可以达到进出的目的。上面的 URL 中没有任何的端口 号,即默认为 80。
以 http://news.qq.com:8080/a/20160209/012154.htm?a=1&b=2&c=3#p=1 为例,这 个 URL 指定了从 8080 这个端口号(即从这个门)访问资源,这个网页服务器必须先 在这个端口部署服务,才能供用户访问(先把门打开,才能提供服务)。
4) path@H_502_8@
接下来是 /a/20160209/012154.htm/。hostname 后面的一长串全部称为 path,是“路 径”的意思,即最终文件所在的路径和文件名,只不过此地址的文件存储在腾讯的服 务器上,即 news.qq.com 这个域名下的若干台机器上。
5) parameters@H_502_8@
?a=1&b=2&c=3 这一部分称为参数(parameters ),也叫查询。
它的目的是在 URL 中带上一些本地的信息传给服务器,a、b、c 三个字符是为了方便大家理解杜撰的 (在 baidu 的 URL 中的参数是这样的:?ie=utf8&f=8&rsv_bp=1&tn=baidu ),这些 KeyValue 的键值对标识了一些特定的意义,最终要由服务器进行判断处理。
其中参数部分加上一些随便填写的值并不会出错,比如 &d=4,只不过服务器不解析这部分 罢了。
再长的 URL 也是由这几个关键部分组成的,只要大家能分割出上面介绍的几个主要部件,就能看岀各部分的意义。
可以将主机理解为一台名叫 news.qq.com 的机器,这台主机在 qq.com 域名下。qq.com 叫作 一级域名,很多人认为 www.qq.com 是一级域名,其实它只不过是一个二级域名,www 等同于刚才介绍的 news。
www.qq.com、news.qq.com、qzone.qq.com、v.qq.com 等都是二级域名。