给产品经理讲技术
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

分析URL的结构

读者每天可能要打开几十个页面,但你是否观察过它们的URL地址?作者带你“庖丁解牛”,把URL拆开看看。

一个标准的 URL 地址由protocol、hostname、port、path、parameters、query 几部分组成。作者以下面这个链接为例进行详细介绍:

http://news.qq.com/a/20160209/012154.htm?a=1&b=2&c=3

protocol

指 http://部分,是协议的意思。协议就是一套规则,定义了数据的封装、打包、拆包和解释的规则,http://即表示只能通过HTTP这套规则访问这个页面资源。读者是否还见过https、ftp、thunder这些协议头?URL地址标识了一个资源,协议头表示我们可以通过不同的规则(协议)访问它。当然,前提是存放这些资源的服务器支持这个协议。

在剧院,座位可以看作资源,观众只有获取资源,才能看到剧目。过年时观众比较多,为了防止发生踩踏事件,剧院不但开放正门,还开放两个侧门。读者可以想象,观众的票面上,一定标识了座位的信息(几排几号),这相当于URL的后半部分。有的票面标了从正门进,有的标了从侧门进,这就相当于URL的协议头标识了协议,一种是按走正门的规则进入,另一种是按走侧门的规则进入,观众拿着走正门的票从侧门进入,会被拒绝而无法获取资源(座位),所以采用何种协议至关重要。前面讨论的前提都是要侧门开放,即服务器支持这种协议。如果不开放侧门,地址就是无效的,访问不到这个资源。

总之,协议头标识了访问具体资源的规则,以后读者看到不同的协议头,就想想这个例子。当然,也可以设计一个协议,例如abc://,这叫作自定义协议。

hostname

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

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这个端口号(即从这个门)访问资源,这个网页服务器必须先在这个端口部署服务,才能供用户访问(先把门打开,才能提供服务)。

path

接下来是/a/20160209/012154.htm/。hostname后面的一长串全部称为path,是“路径”的意思,即最终文件所在的路径和文件名,只不过此地址的文件存储在腾讯的服务器上,即news.qq.com这个域名下的若干台机器上。

parameters

?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也是由这几个关键部分组成的,只要读者能分割出上面介绍的几个主要部件,就能看出各部分的意义。