HTTP2中,因为新的二进制帧的应用,使得可以轻松复竽暌姑单个TCP连接。客户端和办事器可以将 HTTP 消息分化为互不依附的帧,然后交错发送,最后再在另一端把它们从新组装起来。
经由过程wireshark抓包可以看到http2的构造
照样 Google Developers的图:

可以看到我们可以并行交错的发送多个响应和请求,并且应用同一个TCP连接,没有先后次序,每个帧中携带有若何组装的信息,客户端会等某项工作所须要的所有的资本都就绪之后再履行。
数据流优先级(Stream prioritization)
因为可以进行单连接复竽暌姑,办事器和客户端的帧都是交错发送,对于发送给办事器的帧,为懂得决哪些该先处理,哪些该后处理,是以惹人了数据流的优先级,办事器根据优先级来分派资本。例如优先级高的获得更多的CPU和带宽资本。那么竽暌古先级是若何标示的呢?还记得前面的帧类型中有一个Type为PRIORITY,这种类型的帧就是为了告诉办事器这个stream的优先级,此外HEADERS帧中也包含了优先级信息。
HTTP/2经由过程父依附和权重来标示优先级,每一个stream会标示一个父stream id,没有标示的默认为虚拟的root stream,如许按照这种依附关系构建一个依附树,树上层的stream权重较高,同一层的stream会有一个weight来区分资本分派比。。

上图是依附树的一些示例,大年夜左到右,共四棵树。
- 第一个两个stream A 和 B,没有标明父stream,默认依附虚拟的root节点,A、B处于同一层,优先级雷同,根据权重分派资本,A分到 12/(12+4)=3/4 资本,B分到 1/4 资本。
- 第二个D和C有层级构造,C的父级是D,那么办事器拿完全资本竽暌古先处理D,然后再处理C。
- 第三个,办事器先处理D,再处理C,然后处理A和B,A分到 3/4 资本,B分到 1/4 资本。
- 第四个,先处理D,再讲资本对半分处理E和C,之后再按照权重处理A和B
- public class Http2Example {
- final static OkHttpClient client = new OkHttpClient.Builder().build();
- public static void main(String[] args) {
- Request request = new Request.Builder()
- .url("https://blog.fliaping.com")
- .build();
- try {
- Response response = client.newCall(request).execute();
- System.out.println(JSON.toJSONString(response.protocol()));
- System.out.println(response.headers().toString());
- System.out.println(response.body().string());
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
须要留意的一点是,流优先级并不是强迫束缚,当优先级高的流壅塞时,并不克不及不让办事器处理优先级低的流
HTTP/2 新特点
- 二进制分帧(Binary framing layer)
- 多路复竽暌姑 (Multiplexing)
- 单连续接(One connection per origin)
- 数据流优先级(Stream prioritization)
- 首部紧缩(Header Compression)
- 流控 (Flow control)
- 办事端推送(Server Push)
首部紧缩 (Header Compression)
因为当前网站内容越来越复杂,单个页面的请求数根本都是几十个甚至上百,每个请求都要带上客户端或者用户的标识,例如:UA,cookie等头部数据,请求数量多了今后,传输http头部消费的流量也异常可不雅,并且头部数据中大年夜部分都是雷同的,这就是赤裸裸的浪费呀。于是产生了头部紧缩技巧来节俭流量。
推荐阅读
【沙龙】51CTO诚邀您9月23号和多位技巧大年夜咖一路聊智能CDN的优化之路,抓紧时光哦! 谈到AI就必须谈大年夜数据,谈到大年夜数据就得谈云计算。在今天ABC(人工智能AI、大年夜数据Bigdada>>>详细阅读
本文标题:HTTP2总结及简单实践总结
地址:http://www.17bianji.com/lsqh/37583.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示