http的发展历程

HTTP 是基于 TCP/IP 协议的应用层协议。它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口,是互联网的基础协议


http几个意义重大版本:

1、HTTP/0.9 1991年发布 只有一个命令GET


2、HTTP/1.0  1996年5月发布。 任何格式的内容都可以发送,除了GET命令,还引入了POST命令和HEAD命令,丰富了浏览器与服务器的互动手段。TTP请求和回应的格式也变了。除了数据部分,每次通信都必须包括头信息(HTTP header),用来描述一些元数据。其他的新增功能还包括状态码(status code)、多字符集支持、多部分发送(multi-part type)、权限(authorization)、缓存(cache)、内容编码(content encoding)等。

缺点:每个TCP连接只能发送一个请求。发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接。TCP连接的新建成本很高,因为需要客户端和服务器三次握手,

解决办法:非标准的Connection字段,connection:keep-alive


3、HTTP/1.1  1997年1月发布  引入了持久连接(persistent connection),即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive。引入了管道机制(pipelining),即在同一个TCP连接里面,客户端可以同时发送多个请求 。新增了许多动词方法:PUTPATCHHEAD、 OPTIONSDELETE


4、HTTP/2 2015年发布 

      优势:1)HTTP/1.1 版的头信息肯定是文本(ASCII编码),数据体可以是文本,也可以是二进制。HTTP/2 则是一个彻底的二进制协议,头信息和数据体都是二进制,并且统称为"帧"(frame):头信息帧和数据帧。二进制协议的一个好处是,可以定义额外的帧,更方便解析文本数据。2)多路复用 , 在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应,这样就避免了"队头堵塞"。3)HTTP/2 将每个请求或回应的所有数据包,称为一个数据流(stream)。每个数据流都有一个独一无二的编号。数据包发送的时候,都必须标记数据流ID,用来区分它属于哪个数据流。4)HTTP 协议不带有状态,每次请求都必须附上所有信息,http2引入头部信息压缩机制,一方面,头信息使用gzipcompress压缩后再发送;另一方面,客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了。5)服务器推送,允许服务器未经请求,主动向客户端发送资源,这叫做服务器推送(server push)。即使客户端没有请求响应的资源,服务器也会做响应的推送(只不过客户端未接收罢了)。


http2必须运行在tls安全协议下,协议本身未要求必须使用加密,多数客户端 (例如 Firefox,Chrome, Safari, Opera, IE, Edge) 的开发者声明,他们只会实现通过TLS加密的HTTP/2协议,这使得经TLS加密的HTTP/2成为了事实上的强制标准。


5、QUIC(Quick UDP Internet Connection)是谷歌制定的一种基于UDP的低时延的互联网传输层协议,未来有望改为http3。在2016年11月国际互联网工程任务组(IETF)召开了第一次QUIC工作组会议,出现在大家视野中。

http2和quic建立连接模型:




优势:1)利用缓存,显著减少连接建立时间2)改善拥塞控制,拥塞控制从内核空间到用户空间3)没有 head of line 阻塞的多路复用4)前向纠错,减少重传5)连接平滑迁移,网络状态的变更不会影响连接断线。



参考:

1、https://blog.csdn.net/liujianfei526/article/details/53289350

2、https://wetest.qq.com/lab/view/384.html

3、https://www.infoq.cn/article/IgME_4ebP3d46m3tHbaT

4、https://www.ibm.com/developerworks/cn/web/wa-http2-under-the-hood/index.html


确认 取消