网络分层协议
参考《图解TCP/IP》,如下图是一份OSI模型图:
OSI参考模型及各层作用
言归正传
应用层:负责应用程序间数据沟通。
主要有两大类协议方式,一是自定制协议,二是知名协议;
自定制协议顾名思义就是可以程序员自己操作自己定义的协议方式;而知名协议就如http协议;
不管使用那种协议方式,我们都知道数据在网络中的传输是0和1,也就是二进制,协议呢,是对数据进行传输或可持久化存储数据的一种方式,这里我们引入(序列化/反序列化),能更好的帮我们进行数据管理;
序列化:将数据对象按指定协议进行组织成可持久化存储数据或数据传输的二进制数据串;
反序列化:将可持久化存储的数据或数据传输的二进制数据串按照指定协议解析成为各个数据对象;
终于到了HTTP协议
http协议,又称为超文本传输协议,英文名:HyperText Transfer Protocol;
要想学习http协议我们先了解第一个知识点:网址
网址,又称为统一资源定位符(URL)“人如其名”,他是为我们操作端找到服务器而定位的一串字符,可以定位网络中唯一的一份资源;
https呢,就是http版本的加密版本。
我们随即拿出一个URL进行分析:
https://uland.taobao.com
/sem/tbsearch?
spm=a2e0b.20350158.1998559106.8.237c468a5neckV&refpid=mm_26632258_3504122_32538762&keyword=%E5%B9%B3%E6%9D%BF%E7%94%B5%E8%84%91&clk1=f2c63b96b6265dd95479b912f24973a2&upsId=f2c63b96b6265dd95479b912f24973a2&pid=mm_26632258_3504122_32538762&union_lens=recoveryid%3A201_11.170.87.38_22042349_1608211777273%3Bprepvid%3A201_11.170.87.38_22042349_1608211777273
来,一步一步分析,
1.打头的https就是协议方案名,表明我们此次的访问使用的是https加密协议;
2.// 间隔符;
3.uland.taobao.com,即域名,对应的服务器的ip地址,这是域名解析前的字符串数据,其实应该是点分十进制的二进制数据,不过这样的字符串更利于更方便我们记忆和使用;
4./s /s是一符号,后跟请求资源在服务器中的保存路径,注意此处并非一定的实体资源(具体的数据),也可能是功能网页;
5.#ch 查询字符串客户端提交给服务端的数据,由key-value键值对形式组成,键值对中间以&符号分隔开;
说到查询字符串,又要提出URL编码,因为我们提供给网络的查询数据是含有特殊字符组成的字符串,如果提交的数据中含有相同的特殊字符组合便会产生歧义。怎么才是URL编码呢?将每一个特殊字符每个字节转换成16进制的数字字符,例如+会转换成2B;但这样操作编码之后仍可能存在歧义,但相对为编码前歧义会降低很多,为了解决后续问题,我们在每一个字节转换后,在字符前加上%,如上+则转换成%2B,以此来表示经过URL编码。
既然有编码,那就有解码,URL解码是如何操作呢?
在得到查询字符串后,如果在key对应的value中看到%,即将他后紧跟的两个字符反向解码 -> 将两个字符转换为数字%2B -> 2 11 -> 第一个数字左移四位或者乘以16+后面的数字 -> 2x16+11 = 43 -> 对应 + 号;
默认端口
HTTP服务器默认的端口号为80/tcp;
HTTPS服务器默认的端口号为443/tcp 443/udp;