在我们简单了解WEB的发展历史之后,发现整个WEB的都在围绕着各种网络协议。其中比较突出的应该属HTTP 协议。
一、什么是HTTP协议
HTTP协议的全称为超文本传输协议(HyperText Transfer Protocol),它最早是由CERN(欧洲核子研究组织)的蒂姆 • 伯纳斯 - 李(Tim BernersLee)博士提出的,目的是为了能让远隔两地的人们能进行信息交流(超文本也就是HTML)。
二、HTTP协议的发展历史
各阶段的区别:
http/0.9:比较简单只能传输html,仅支持get请求,也没有响应码和响应消息。
http/1.0:短连接(每一个请求建立一个TCP连接,请求完成后立马断开连接。这将会导致2个问题:连接无法复用,head of line blocking连接无法复用会导致每次请求都经历三次握手和慢启动。三次握手在高延迟的场景下影响较明显,慢启动则对文件类大请求影响较大。head of line blocking会导致带宽无法被充分利用,以及后续健康请求被阻塞。)
http/1.1:增加了长连接(通过http pipelining实现。多个http 请求可以复用一个TCP连接,服务器端按照FIFO原则来处理不同的Request);增加connection header(该header用来说明客户端与服务器端TCP的连接方式,若connection为close则使用短连接,若connection为keep-alive则使用长连接);增加身份认证;增加状态管理;增加Cache缓存等机制相关的请求头和响应头;增加Host header。
http/2.0:增加多路复用,服务器推送。
三、通过TCP/IP协议族来了解HTTP
HTTP是TCP/IP协议族的子集,想要理解HTTP协议应该先了解TCP/IP协议族。TCP/IP协议族是网络传输过程中各种协议的集合。
TCP/IP协议族采用分层管理,可以分为四层:应用层、传输层、网络层、链路层。利用 TCP/IP 协议族进行网络通信时,会通过分层顺序与对方进行通信。客户端从应用层往下走,服务器则往链路层往上走。(图片来源于《图解http》)
以HTTP协议通信为例:首先,我们打开一个想看web应用,浏览器通过HTTP协议发送请求,传输层将应用层传递下来的数据(HTTP请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层。在网络层(IP 协议),增加作为通信目的地的 MAC 地址后转发给链路层。服务器在链路层接收到数据,按序往上层发送,一直到应用层,然后我们的浏览器就能接收到响应的信息。
客户端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息。反之,服务器端在层与层传输数据时,每经过一层时会把对应的首部消去。(图片来源于《图解http》)
HTTP协议之所以能够准确无误进行信息传递,是依靠传输层的TCP协议。客户端和服务器通过TCP协议三次握手进行连接,四次挥手断开连接。发送端首先发送一个带 SYN 标志的数据包给对方。接收端收到后,回传一个带有 SYN/ACK 标志的数据包以示传达确认信息。最后,发送端再回传一个带 ACK 标志的数据包,代表“握手”结束。 (图片来源于《图解http》)