Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

http2.0 #19

Open
RachelRen opened this issue Sep 6, 2018 · 0 comments
Open

http2.0 #19

RachelRen opened this issue Sep 6, 2018 · 0 comments

Comments

@RachelRen
Copy link
Owner

主要从这些方面阐述

  • 多路复用
  • 修改了http的数据格式(分帧), 二进制格式
  • 服务端主动推送
  • header压缩
  • 请求优先级的指定

新的二进制格式

在应用层和传输层之间增加了一个二进制分帧层

在分帧层中,会将传输的信息分割成更小的消息和帧,并采用二进制格式进行编码。在http1.x中的头部信息会被封装到HEADER frame,而相应的Request Body则封装到DATA frame 中。

关于http2.0中的三个概念如下:

  • 数据流:已建立的连接内的双向字节流,可以承载一条或多条消息。
  • 消息:与逻辑请求或响应消息对应的完整的一系列帧。
  • 帧:HTTP/2 通信的最小单位,每个帧都包含帧头,至少也会标识出当前帧所属的数据流。

这些概念总结如下:

  • 所有通信都在一个 TCP 连接上完成,此连接可以承载任意数量的双向数据流。
  • 每个数据流都有一个唯一的标识符和可选的优先级信息,用于承载双向消息。
  • 每条消息都是一条逻辑 HTTP 消息(例如请求或响应),包含一个或多个帧。
  • 帧是最小的通信单位,承载着特定类型的数据,例如 HTTP 标头、消息负载,等等。 来自不同数据流的帧可以交错发送,然后再根据每个帧头的数据流标识符重新组装。

http2 0

HTTP1.x 中,是基于文本协议的格式的。文本的表现形式有很多种,但是很难做到健壮

HTTP的性能优化主要是因为低延迟,HTTP/2可以让通信都在一个连接上完成,这个连接可以承载任意数量的双向数据流。

HTTP/2 中的新二进制分帧层解决了 HTTP/1.x 中存在的队首阻塞问题,也消除了并行处理和发送请求及响应时对多个连接的依赖。结果,应用速度更快、开发更简单、部署成本更低。

多路复用

影响一个网络请求的因素主要有两个,带宽和延迟。今天的网络基础建设已经使得带宽得到极大的提升,大部分时候都是延迟在影响响应速度。http1.0被抱怨最多的就是连接无法复用,和head of line blocking这两个问题。理解这两个问题有一个十分重要的前提:客户端是依据域名来向服务器建立连接,一般PC端浏览器会针对单个域名的server同时建立6~8个连接,手机端的连接数则一般控制在4~6个。显然连接数并不是越多越好,资源开销和整体延迟都会随之增大。

连接无法复用会导致每次请求都经历三次握手和慢启动。三次握手在高延迟的场景下影响较明显,慢启动则对文件类大请求影响较大。

多路复用即每一个request都是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个request可以随机的混杂在一起,接收方可以根据request的id将request再归属到各自不同的服务端请求里面。

多路复用允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。

default

总结:

  • 但连接多资源的方式,减少服务端的链接压力,内存占用更少,连接吞吐量更大
  • 由于TCP连接的减少而是网络拥塞状况得到改善

表现如下:

  • 并行交错地发送多个请求,请求之间互不影响。
  • 并行交错地发送多个响应,响应之间互不干扰。
  • 使用一个连接并行发送多个请求和响应
  • 消除不必要的延迟和提高现有网络容量的利用率,从而减少页面加载时间。

header压缩

因为http中头部信息带有大量信息,而且每次都是重复发送的,所以使用encoder来减少需要传送的header的大小,并且通讯双方都会保存一份header fields,这样就避免了header的传输,也减少了需要传输的大小。

服务端推送

服务端推送是一种在客户端请求之前发送数据的机制。在 HTTP/2 中,服务器可以对客户端的一个请求发送多个响应。

HTTP,HTTP2.0,SPDY,HTTPS你应该知道的一些事

HTTP,HTTP2.0,SPDY,HTTPS看这篇就够了

HTTP/2.0 相比1.0有哪些重大改进?

HTTP/2 简介

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant