HTTP协议
现在讲讲应用层,应用层的协议有很多,其中就用HTTP协议。HTTP协议应该是我们平时接触最直接的协议了。比如我们再浏览器中输入http://www.baidu.com.浏览器就会把www.baidu.com这个和域名发送到DNS服务器,经过解析后得到IP地址,接下来就发送HTTP请求。HTTP是基于TCP协议的,所以要先跟服务器建立链接,也就是三次握手。建立连接之后就开始发送HTTP请求。HTTP请求格式如下.
HTTP请求主要包含三部分。
第一部分是请求行,包括请求方法,标准的HTTP请求方法有GET,PUT,POST, DELETE, OPTION。然后就是URL,接着就是版本比如HTTP1.1
第二部分是请求头。请求同中包含一些重要的key-value键值对,比如Content-Type指定传入内容格式,authorization指定鉴权需要的信息,Cache-Control来控制缓存等等。
第三部分就是请求体,就是要传送的数据内容。
接下来就是HTTP求情的发送过程,HTTP请求再应用层通过二进制流的方式传输并加上TCP头,到了TCP曾会把二进制流转化为报文段转送,这时候会把目标IP和源IP加到IP头里,然后交给IP层。再IP层要查看目标IP和自己是不是一个局域网,如果是则直接一个ARP广播获取目标IP的mac地址,如果不是,就把请求发送到网关,同样还是ARP协议获取网关的MAC地址,网关接受到请求后提取出目标IP地址由网关根据路由协议决定下一级跳转,经过一级一级跳转后,请求到达目标局域网,目标局域网的路由器发现请求IP是跟我一个网络的于是就在他的局域网通过ARP找到目标IP的mac地址。找到mac地址后把源MAC地址和目标MAC地址加到MAC头中,交给网络层。目标机器发现MAC地址符合就把包接受然后一层层把包头剥开,最后发现需要访问这个端口的程序。于是程序响应请求。返回一个网页。
再看HTTP返回格式
HTTP返回也是包含三部分:
第一部分是状态行,包括版本,状态吗,这个状态码就是平时我们看的200,400,500等,短语就是介绍下原因
第二部分是返回头,也是一组key-value的键值对
第三部分是返回实体就是返回的数据内容。
HTTP2.0
HTTP协议发展到后来出现HTTP2.0 版本,这个版本先对于HTTP1.1,有一下改进
1. HTTP2.0 对请求头进行一定的压缩。将原来的key-value键值对建立一个索引表,在发送请求的时候请求头之用发送索引表的索引
2. HTTP2.0把一个TCP连接分成多个流,每个流都有自己的ID,相当于一个虚拟的通道
3. HTTP2.0将每个流中传输的数据分为多个消息和帧,并对他们采用二进制编码,这些帧可以并行发送,然后通过每个帧的头部表示重新组合,提高了传输效率
网友评论