域名
任何客户端在需要访问一个服务端时都需要一个IP和端口号,而当一个浏览器去访问一个网页时通常更多使用的是域名而不是IP:port
的方式,
www.baidu.com
这是百度的域名;
实际上当浏览器访问到一个网站的域名时将会把域名解析成对应的IP:port
即IP+端口号的形式进行访问,本质上还是采用IP和端口号的形式进行访问,只不过使用域名访问的方式将大幅度提升用户的使用体验;
域名实际上是一串字符串,这是运营商的一种映射的方式,将对应的字符串映射至对应的IP和端口号从而对服务端进行访问;
通常使用ping
来查看当前网络连接的情况,在进行ping
时对应的也会将对应域名的IP地址暴露出来;
ping www.baidu.com
在这个例子中使用ping
来查看当前计算机与百度首页的连接,其中返回了一个180.101.50.188
的IP地址,可以通过浏览器访问该IP地址来直接访问百度的首页;
在使用浏览器对一个IP进行访问时,若是在访问时只有IP没有端口号,浏览器默认将会以HTTP
协议对该IP进行访问;
http://180.101.50.188/ 等价于 180.101.50.188:80
https://180.101.50.188/ 等价于 180.101.50.188:443
HTTP协议是一种应用层协议,该协议默认的端口号为80
,HTTPS协议默认端口号为443
;
URL
URL(Uniform Resource Locator) 统一资源定位符;
所有网络上的资源都可以用唯一的一个字符串表示,可以通过该统一资源定位符在公网中获取对应的网络资源;
https://gitee.com/half-intermediate-mangfu/my_-linux/tree/master/Pro24/Network/HTTP
通过域名来区分不同主机的IP,资源由哪个进程访问由端口号来决定,不仅如此服务器上也有不同的路径,无论是域名还是端口号都是具有唯一性的,域名(IP)在公网中具有唯一性,端口号则是在同一台主机下具有唯一性,同样的不同的路径也是在主机中具有唯一性的;
在上面的这段url
中https://
为协议,也为端口号(https
默认端口号为443
),gitee.com
为域名,/half-intermediate-mangfu/my_-linux/tree/master/Pro24/Network/HTTP
则为路径;
这是一个较为简单的URL但并不是一个完整的URL,完整URL如下:
-
http
该字段为协议,方案名称,表示需要使用哪种协议能够正确访问该IP;
-
user:pass
表示用户的登录信息(认证),但随着登陆页面的独立化该字段也越来越少见;
-
www.example.com
表示服务器的域名,即IP地址;
-
80
这里的
80
表示是端口号,但是由于在该URL的开头处已经指定了使用的协议,意味着该字段可以被省略;这也是上面的URL不存在端口号信息
-
/dir/index.htm
表明是一个文件路径,标识着该网络资源在该服务器上的相对路径或者绝对路径;
当一个网页资源的路径以
/
作为分隔符,那么这个网络资源则有肯能部署在类UINX系统中;其中第一个
/
表示的是Web
根目录,Web
根目录可能是服务器中的根目录,也可能是服务器中的一个特定目录作为根目录,而路径则为一个相对路径; -
?uid=1
网络的行为实际上只有两种:
- 获取别人的网络资源
- 上传自己的资源至网络
在访问一个网页时实际上就是将别人的
htm
文件资源获取至自己的浏览器中;而当需要上传一个信息时可能该主机的一些信息也会被上传至网络,其中
uid=1
是一种Key-Value
的键值对形式,表示该请求的一些动态数据;即
url
可以跟?
符号,?
符号后可以带参表示一些需要携带的信息; -
#ch1
表示片段标识符;
通常用在网页中以实现页面内的跳转,它在URL中以
#
符号开始,后接标诈字;
URLEncode和URLDecode
URLEncode和URLDecode为URL编码与URL解码;
这是用于处理URL中特殊字符的函数或者方法,在上文中提到,URL实际上存在许多的特殊字符,包括/ : . @ ? #
等特殊符号,如果在搜索过程中直接将特殊符号以符号的形式进行搜索那么将会使得URL错误,因此在URL中对于搜索的特殊符号需要进行特殊的处理,即URLEncode(URL编码);
假设需要搜索一个内容为aaaaa://?##bbbbb
的内容,如果未经过URLEncode,最终的URL将为:
https://www.bing.com/search?q=aaaaa+://?##bbbbb
但有时这些特殊符号会导致URL解析错误;
而当对特殊符号进行URLEncode编码那么特殊符号将不会造成URL解析错误;
本质原因是当把未经编码的特殊符号传给服务端时服务端将无法直接区分众多特殊符号中哪些属于URL哪些属于用户需要搜索的内容;
少量的情况,提交或者获取数据本身可能包含和URL中特殊字符冲突的字符,要求Browser和Server双方进行编码和解码;
当Browser向Server发送数据时需要对URL中的特殊符号进行Encode编码,当Server接收到来自Browser发送来的数据时需要对URL中编码后的特殊符号进行解码,从而保证需要搜索(作为数据发送)的特殊符号不会与URL原本的特殊符号产生冲突;
-
URLEncode 编码的规则如下
将需要转码的字符转为16进制,然后够从右到左取四位,不足四位直接处理,每两位作一位,前面加上
%
,编码成%XY
的格式;-
获取字符的编码值
对于ASCII字符,先获取其对应的ASCII码(范围在
0-127
);
-