我们每天可能要打开几十个页面,但你是否观察过它们的 URL 地址?接下来带大家“庖丁解牛”,把 URL 拆开看看。
一个标准的 URL 地址由 protocol、hostname、port、path、parameters、query 几部分组成。
接下来以下面这个链接为例进行详细介绍:
指 http:// 部分,是协议的意思。协议就是一套规则,定义了数据的封装、打包、拆包和解释的规则,http:// 即表示只能通过 HTTP 这套规则访问这个页面资源。
大家是否还见过 https、ftp、thunder 这些协议头? URL 地址标识了一个资源,协议头表示我们可以通过不同的规则(协议)访问它。当然,前提是存放这些资源的服务器支持这个协议。
在剧院,座位可以看作资源,观众只有获取资源,才能看到剧目。过年时观众比较多,为了防止发生踩踏事件,剧院不但开放正门,还开放两个侧门。可以想象,观众的票面上,一定标识了座位的信息(几排几号),这相当于 URL 的后半部分。
有的票面标了从正门进,有的标了从侧门进,这就相当于 URL 的协议头标识了协议,一种是按走正门的规则进入,另一种是按走侧门的规则进入,观众拿着走正门的票从侧门进入,会被拒绝而无法获取资源(座位),所以采用何种协议至关重要。
前面讨论的前提都是要侧门开放,即服务器支持这种协议。如果不开放侧门,地址就是无效的,访问不到这个资源。
总之,协议头标识了访问具体资源的规则,以后大家看到不同的协议头,就想想 这个例子。当然,也可以设计一个协议,例如 abc://,这叫作自定义协议。
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 等都是二级域名。
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 这个端口号(即从这个门)访问资源,这个网页服务器必须先 在这个端口部署服务,才能供用户访问(先把门打开,才能提供服务)。
接下来是 /a/20160209/012154.htm/。hostname 后面的一长串全部称为 path,是“路 径”的意思,即最终文件所在的路径和文件名,只不过此地址的文件存储在腾讯的服 务器上,即 news.qq.com 这个域名下的若干台机器上。
?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 也是由这几个关键部分组成的,只要大家能分割出上面介绍的几个主要部件,就能看岀各部分的意义。