HTTP 1.0,1.1,2.0版本的区别

  • Post author:
  • Post category:其他



HTTP/1.0

1996年http1.0版本发布

1、为了提高系统的效率,http1.0协议规定浏览器与服务器只保持短暂连接,请求结束就断开连接。

2、这虽然减少了空连接的资源占用,但是增加了连接次数,连接的复用性降低,每次有新的请求就要重新建立一次连接。

3、TCP连接的建立和断开需要三次握手、四次挥手,是一个很耗费时间的过程,每个连接又只能解决一次请求的通信,所以效率十分低下。


HTTP/1.1

1999年http1.1版本诞生

1、在http1.0基础上默认开启了keepalive (长链接),客户端和服务器之间建立的连接可以复用,默认请求结束后保持连接一段时间,在这一段时间,对方都没有新的请求,就可以主动断开连接,或者客户端在最后一个请求时,主动告诉服务端要断开连接。大大节省了TCP连接频繁建立和断开的开销。

2、与http1.0相比,增加了管道机制,即在同一个 TCP连接中,客户端可以同时发送多个请求,但是服务端还是按序响应,并没有完全解决“队头阻塞”,依然是串行(客户端在收到前边请求的响应前,后边的请求都要堵塞等待响应,客户端收到响应也不递送)。

3、在http1.0的基础上,还添加了Host字段,这样就可以请求同一服务器的不同站点;增加了缓存机制、扩展了错误状态码、请求范围引入了range域.。


HTTP/2.0

1999年http1.1发布之后的首个更新

1、http1.1采用了长连接和管道技术,大大提高了效率,但是服务端还是按序响应,效率还是十分低下。

2、为了解决1.1中存在的效率问题,http2.0采用了多路复用,客户端和浏览器都可以同时发送多个请求或响应,并且不用按照顺序一一对应,这是因为http2进行了二进制分帧(应用层和传输层之间的二进制分帧层),将传输信息分为更小的多个不同类型的帧,并进行标记,确保请求和响应的有序重组。

3、相比http1.1,还做了header压缩,和服务端推送(预先把一些热点等推送到缓存)。


为什么http1.1不能实现多路复用?

http1.1是基于文本分割解析的协议,服务器需要不断读入字节直到遇到分隔符,因为以分隔符分割消息的数据在完成之前不能停止解析,所以一次只能处理一个请求或响应。而且服务器无法预知解析这样的数据需要多大的内存,在保证解析效率和速度的前提下,如何划分内存是一个问题。

http2.0是基于二进制帧设计的,帧是对消息的封装,每个帧都保存了一些信息,服务器读取这些信息就知道每个帧大概需要多少字节来处理信息。分帧设计后,可以同时发送请求和响应。



版权声明:本文为m0_57456703原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。