《浅析URL》
什么是URL
根据维基百科,URL(Uniform Resuorce Locator)统一资源定位器是因特网上标准的资源的地址(Address),如同在网络上的门牌。它最初是由蒂姆·伯纳斯-李发明用来作为万维网的地址,现在它已经被万维网联盟编制为因特网标准。
上面的解释属于比较多,我理解为,URL就是浏览器地址栏内的地址。
URL的标准格式 | ||||||
---|---|---|---|---|---|---|
协议类型:// | 服务器地址: | 端口号 | /文件路径 | 文件名 | ?查询参数 | #片段id |
那么,下面就来说明下每个部分是什么。
为了更好地理解URL的作用,我会举例说明每个字段的功能,并且只使用一个例子,来确保理解起来更加顺利。
我们可以将访问网址类比为打电话。
服务器地址
我们打乱顺序,先从服务器地址说起。
当我们打电话时,最先做的,应该是拨电话号码。这里的服务器地址,就起到了电话号码的作用。
例如,我们想要访问baidu.com
,可以直接在浏览器地址栏输入,就可以打开百度。
那么这里就不得不提到几个概念
- IP
- 域名(domain)
- DNS(Domain Name System)
IP
我们打电话,首先要播电话号码,电话号码一般是数字。同样,我们可以输入一组数字来直接访问页面,这组数字就是IP
IP有两个作用
- 如何定位设备
- 如何封装数据报文,用以跟其他设备进行传输
这里我们只先关心他的第一个作用。就是通过一个IP,我们可以找到一个设备,
就像打电话,通过一个电话号码,我们可以拨电话到一部手机。
域名(domain)
但是,如果电话号码多了,我们记不住怎么办?
相信大家不会记住每个人的电话,而是会查电话号码本。
我们会给电话号码起一个名字,用这个名字来储存电话号码。这个名字,就是域名(domain)。
我们在浏览器输入的baidu.com
,就是一个域名
一个域名由以下几部分组成
三级域名 | 二级域名 | 一级域名 |
---|---|---|
www | baidu | com |
一般一个完整的域名可以只由二级和一级组成,例如可以直接输入baidu.com
,也可以添加更多级域名,例如www.baidu.com
。
这里注意,一级二级域名相同,三级域名不同,IP不一定相同。
例如www.baidu.com
和baidu.com
的IP是不同的。
Ping
我们可以在命令行中使用ping
命令来确认这一点。
1 | $ ping baidu.com |
1 | $ ping www.baidu.com |
DNS
那么,我们将名字和电话存储在哪里呢?如果只存储在自己的手机,那么只要更换手机,就找不到对应的电话号码了。
所以,我们将电话号码本存储在互联网上,这就是DNS(Domain Name System)服务器。
我们在地址栏输入baidu.com
时,不会只接访问百度的服务器,而是先会到DNS服务器上查找对应的IP地址,然后通过IP地址访问百度的服务器。
那么也很显然,一个名字可以存多个电话,域名也一样,一个域名可以对应多个IP,反之亦然。
nslookup
我们可以在命令行中使用nslookup
功能,添加一个域名来查看对应的IP
1 | $ nslookup baidu.com |
以上,就是服务器地址部分。
端口号
如果我们打电话到了中国移动,那么会提示你输入号码来选择服务,端口号也是一样的。但是在平时我们并没有输入端口号,这是应为浏览器会根据协议内容添加一个默认的端口号,HTTP为80,HTTPS为443。
传输协议
传输协议就是字段开始的协议类型部分。
在既然电话本是存储在互联网上的,那么有没有可能有人更改了名字所对应的电话,来做一些诈骗之类的事情呢?
这就是域名劫持。
为了防止此类事情,就需要明确传输协议。
如果指定HTTP协议,那么传输的数据都是明文,就像打电话,都说普通话,在不认识的情况下很难分辨对方的真假。
如果指定HTTPS协议,那么就会对数据进行加密,相当于打电话时说一些暗号,如果不知道暗号的情况下,对方是听不懂的,就提升了安全性。
当然,还有传输文件的ftp协议等,暂时不做深究。
文件路径
下一个字段就是服务器地址,这个就相当于拨打一个公司的电话,打电话到前台,然后告诉前台你要找那个部门。
文件名
这就是打电话到一个大公司中要找的人。
查询参数
当我们找到这个人之后,可以告诉他做一些事情,这就是查询路径的作用。
#id片段
这个比较简单,我们可以在网页中给某一部分指定一个id值,直接在URL后添加#<id值>
就可以跳转到相应的部分。
注意,这个字段服务器是无法获取到的。
以上就是我对URL的一些认识。