《浅析URL》

什么是URL

根据维基百科,URL(Uniform Resuorce Locator)统一资源定位器是因特网上标准的资源的地址(Address),如同在网络上的门牌。它最初是由蒂姆·伯纳斯-李发明用来作为万维网的地址,现在它已经被万维网联盟编制为因特网标准。

上面的解释属于比较多,我理解为,URL就是浏览器地址栏内的地址。

URL的标准格式
协议类型:// 服务器地址: 端口号 /文件路径 文件名 ?查询参数 #片段id

那么,下面就来说明下每个部分是什么。

为了更好地理解URL的作用,我会举例说明每个字段的功能,并且只使用一个例子,来确保理解起来更加顺利。

我们可以将访问网址类比为打电话。

服务器地址

我们打乱顺序,先从服务器地址说起。

当我们打电话时,最先做的,应该是拨电话号码。这里的服务器地址,就起到了电话号码的作用。

例如,我们想要访问baidu.com,可以直接在浏览器地址栏输入,就可以打开百度。

那么这里就不得不提到几个概念

  1. IP
  2. 域名(domain)
  3. DNS(Domain Name System)

IP

我们打电话,首先要播电话号码,电话号码一般是数字。同样,我们可以输入一组数字来直接访问页面,这组数字就是IP

IP有两个作用

  1. 如何定位设备
  2. 如何封装数据报文,用以跟其他设备进行传输

这里我们只先关心他的第一个作用。就是通过一个IP,我们可以找到一个设备,
就像打电话,通过一个电话号码,我们可以拨电话到一部手机。

域名(domain)

但是,如果电话号码多了,我们记不住怎么办?

相信大家不会记住每个人的电话,而是会查电话号码本。

我们会给电话号码起一个名字,用这个名字来储存电话号码。这个名字,就是域名(domain)。

我们在浏览器输入的baidu.com,就是一个域名

一个域名由以下几部分组成

三级域名 二级域名 一级域名
www baidu com

一般一个完整的域名可以只由二级和一级组成,例如可以直接输入baidu.com,也可以添加更多级域名,例如www.baidu.com

这里注意,一级二级域名相同,三级域名不同,IP不一定相同。

例如www.baidu.combaidu.com的IP是不同的。

Ping

我们可以在命令行中使用ping命令来确认这一点。

1
2
3
$ ping baidu.com
PING baidu.com (39.156.69.79): 56 data bytes
64 bytes from 39.156.69.79: icmp_seq=0 ttl=41 time=35.095 ms
1
2
3
$ ping www.baidu.com
PING www.a.shifen.com (182.61.200.6): 56 data bytes
64 bytes from 182.61.200.6: icmp_seq=0 ttl=54 time=4.137 ms

DNS

那么,我们将名字和电话存储在哪里呢?如果只存储在自己的手机,那么只要更换手机,就找不到对应的电话号码了。

所以,我们将电话号码本存储在互联网上,这就是DNS(Domain Name System)服务器。

我们在地址栏输入baidu.com时,不会只接访问百度的服务器,而是先会到DNS服务器上查找对应的IP地址,然后通过IP地址访问百度的服务器。

那么也很显然,一个名字可以存多个电话,域名也一样,一个域名可以对应多个IP,反之亦然。

nslookup

我们可以在命令行中使用nslookup功能,添加一个域名来查看对应的IP

1
2
3
4
5
6
7
8
9
$ nslookup baidu.com
Server: 192.168.10.1
Address: 192.168.10.1#53

Non-authoritative answer:
Name: baidu.com
Address: 220.181.38.148 # 百度对应的IP
Name: baidu.com
Address: 39.156.69.79 # 百度对应的IP

以上,就是服务器地址部分。

端口号

如果我们打电话到了中国移动,那么会提示你输入号码来选择服务,端口号也是一样的。但是在平时我们并没有输入端口号,这是应为浏览器会根据协议内容添加一个默认的端口号,HTTP为80,HTTPS为443。

传输协议

传输协议就是字段开始的协议类型部分。

在既然电话本是存储在互联网上的,那么有没有可能有人更改了名字所对应的电话,来做一些诈骗之类的事情呢?

这就是域名劫持。

为了防止此类事情,就需要明确传输协议。

如果指定HTTP协议,那么传输的数据都是明文,就像打电话,都说普通话,在不认识的情况下很难分辨对方的真假。

如果指定HTTPS协议,那么就会对数据进行加密,相当于打电话时说一些暗号,如果不知道暗号的情况下,对方是听不懂的,就提升了安全性。

当然,还有传输文件的ftp协议等,暂时不做深究。

文件路径

下一个字段就是服务器地址,这个就相当于拨打一个公司的电话,打电话到前台,然后告诉前台你要找那个部门。

文件名

这就是打电话到一个大公司中要找的人。

查询参数

当我们找到这个人之后,可以告诉他做一些事情,这就是查询路径的作用。

#id片段

这个比较简单,我们可以在网页中给某一部分指定一个id值,直接在URL后添加#<id值>就可以跳转到相应的部分。

注意,这个字段服务器是无法获取到的。

以上就是我对URL的一些认识。