Http2的一些特点

Http2协议

因为语义上它与 HTTP/1 兼容,所以报文还是由“Header+Body”构成的,但在请求发送 前,必须要用“HPACK”算法来压缩头部数据。头部数据压缩之后,HTTP/2 就要把报文拆成二进制帧准备发送。

头部压缩

HTTP/1 里可以用头字段“Content-Encoding”指定 Body 的编码方式,比如用 gzip 压缩来节约带宽,但报文的另一个组成部分——Header 却被无视了,没有针对它的优化手段。

http2在客户端和服务器两端建立“字典”,用索引号表示重复的字符串,这样重复使用的字段就不用每次都写入请求头中。

另外还釆用哈夫曼编码来压缩整数和字符串。

二进制数据

HTTP/1 里纯文本形式的报文了,它的优点是“一目了然”,用最简 单的工具就可以开发调试,非常方便。 但 HTTP/2 不再使用肉眼可见的 ASCII 码,而是向下层的 TCP/IP 协议“靠拢”,全面采用二进制格式。http2把原来的“Header+Body”的消息“打散”为 数个小片的二进制“帧”(Frame),用“HEADERS”帧存放头数据、“DATA”帧存放 实体数据。同时这些“帧”(Frame)会包含一个序列号和流ID.流ID可以标识某个请求-响应。

虚拟的“流”

HTTP/2 为此定义了一个“流”(Stream)的概念,它是二进制帧的双向传输序列,同一 个消息往返的帧会分配一个唯一的流 ID。也就是说一个请求-响应中,所有帧(Frane)都是同一个流ID.而这些数据帧按照次序组装起来就是 HTTP/1 里的 请求报文和响应报文。

由于流的存在,在一个tcp连接中可以同时传输多个“流”(“多路复用),而且多个请求-响应的顺序也可以打乱,避免了“队头阻塞“问题。

HTTP/2 还在一定程度上改变了传统的“请求 - 应答”工作模式,服务器不再是完全被动地 响应请求,也可以新建“流”主动向客户端发送消息。比如,在浏览器刚请求 HTML 的时 候就提前把可能会用到的 JS、CSS 文件发给客户端,减少等待的延迟,这被称为“服务器 推送”(Server Push,也叫 Cache Push)。

强化安全

加密版本的 HTTP/2 在安全方面做了强化,要求下层的通信协议必须是 TLS1.2 以上,还要支持前向安全和 SNI,并且把几百个弱密码套件列入了“黑名单”,比 如 DES、RC4、CBC、SHA-1 都不能在 HTTP/2 里使用,相当于底层用的 是“TLS1.25”。

nginx如何升级到http2

如果nginx已经配置了ssl,只需要在 server 配置里再多加一个参数就可以搞定了,在listen 加上http2即可。

server {
listen 443 ssl http2;
server_name www.xxx.net;
ssl_certificate xxx.crt;
ssl_certificate_key xxx.key;

本作品采用《CC 协议》,转载必须注明作者和本文链接
用过哪些工具?为啥用这个工具(速度快,支持高并发...)?底层如何实现的?
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!