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.

image-20210320165215230

虚拟的“流”

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;

本文由博客群发一文多发等运营工具平台 OpenWrite 发布

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

runtoweb3

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值