HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。


HTTP 1.0需要使用keep-alive参数来告知服务器端要建立一个长连接。

HTTP 1.1默认使用长连接,可有效减少TCP的三次握手开销。

 

HTTP 1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,否则返回401。

客户端如果接受到100,才开始把请求body发送到服务器。

这样当服务器返回401的时候,客户端就可以不用发送请求body了,节约了带宽。

另外HTTP还支持传送内容的一部分。

这样当客户端已经有一部分的资源后,只需要跟服务器请求另外的部分资源即可。

这是支持文件断点续传的基础。

 

HTTP 1.0是没有host域的,HTTP1.1才支持这个参数。

 

HTTP 2.0使用多路复用技术(Multiplexing),多路复用允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。

 

HTTP 1.1在同一时间对于同一个域名的请求数量有限制,超过限制就会阻塞请求。

 

多路复用底层采用"增加二进制分帧层"的方法,使得不改变原来的语义、首部字段的情况下提高传输性能,降低延迟。

 

二进制分帧将所有传输信息分割为更小的帧,用二进制进行编码,多个请求都在同一个TCP连接上完成,可以承载任意数量的双向数据流。HTTP/2更有效的使用TCP连接,得到性能上的提升。

 

网上不错的一个过程图片:

HTTP/2新增首部压缩(Header Compression),采用HPACK算法

HTTP/2新增服务端推送(Server Push)