http协议的发展历史&http2的新特性

发展历史

HTTP/0.9(过去)

大致时间:过去 - 1996

  • 只有一个命令GET
  • 没有HEADER等描述数据的信息
  • 服务器发送完毕,就关闭TCP连接

HTTP/1.0(过去)

大致时间:1996左右

  • 增加了很多命令
  • 增加status code和header
  • 多字符集支持、多部分发送、权限、缓存等

HTTP/1.1(现在)

大致时间:1996左右 - 现在

  • 持久连接
  • pipeline
  • 增加host和其他一些命令

HTTP2(未来已来)

大致时间:2012 开始制定规范

  • 所有数据以二进制传输
  • 同一个连接里面发送多个请求不再需要按照顺序来
  • 头信息压缩以及推送等提高效率的功能

概览

在这里插入图片描述

http2

  • 采用二进制协议:HTTP/1.1的头信息是文本(ASCII编码),数据体可以是文本(解析非常麻烦),也可以是二进制。而HTTP/2则是一个彻底的二进制协议,头信息和数据体都是二进制,通称为“帧”(FRAME):头信息帧和数据帧。二进制协议的一个好处是:可以定义额外的帧,解析方便。
  • 多路复用(双向,实时的通信):HTTP/2复用TCP连接,在一个连接里,客户端和服务端都可以同时发送多个请求或回应,而不用按照顺序一一对应,这样就避免“队头阻塞”。举例来说:在一个TCP连接里面,服务器同时收到A请求和B请求,先回应A请求,结果发现处理过程非常耗时,于是就发送A请求已经处理好的部分,接着回应B请求,完成后,才发送B请求剩下的部分。
  • 数据流:HTTP/2的数据流是不按顺序发送的,同一个连接里面连续的数据包,可能属于不同的回应。因此必须要对数据包标记,指出它属于哪个回应。HTTP/2将每一个请求或回应的所有数据包,称为一个数据流。每个数据流都有一个独一无二的编号。数据包发送时,都必须标记数据流ID,用于区分它属于哪一个数据流,另外规定:客户端发出的数据流,ID一律为奇数,服务器发出的,ID为偶数。数据流发送一半时,客户端和服务器都可以发送信号,取消这个数据流。即HTTP/2可以取消某一个请求,同时保证TCP连接还开着,可以被其他请求使用。客户端还可以指定数据流的优先级,优先级越高,服务器就越早回应。
  • 头信息压缩:HTTP2以前的版本协议不带有状态,每次请求都必须附上所有的信息。所以,请求的很多字段都是重复的,比如COOKIE和USER AGENT,一模一样的内容,每次请求都必须附带,这很浪费很多宽带,也影响速度。HTTP/2优化了这一点。引入了头信息压缩机制。一方面:头信息使用GZIP或COMPRESS压缩后再发送,另一方面,客户端和服务端同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段,只发送索引号,提高速度。
  • 服务器推送:HTTP/2允许服务器未经请求,主动向客户端发送资源–>服务器推送。eg:客户端请求一个网页,这个网页里面包含静态资源。正常情况下,客户端必须收到网页后,解析HTML源码,发现有静态资源,再发送静态资源请求;其实,服务器可以预期到客户端请求网页后,很可能再请求静态资源,所以主动把这些静态资源随网页一起发给客户端。

参考

https://www.jianshu.com/p/6faabcc55df4
https://www.runoob.com/http/http-tutorial.html

猜你喜欢

转载自blog.csdn.net/weixin_43972437/article/details/114887784