HTTP2.0的二进制分帧
HTTP2.0的所有通信都是在一个TCP连接上完成的。
1.信息传输术语
1.1 流
虚拟信道,可以承载双向消息,每个流都有一个唯一的整数标识符(1、2....N);
1.2 消息
逻辑上的HTTP消息,比如请求、响应,由一或多个帧组成。
1.3 帧
最小的通信单位,承载特定类型的数据,比如HTTP首部、负荷等等。
2.请求优先级
HTTP消息分解为多个独立帧之后,这些帧可以交错和传输顺序,进一步提升性能。为了做到这一点,每个流都可以带上31个比特位的优先级标示
服务器通过这些优先级的标志来分配资源(CPU、内存、带宽),而在响应数据准备好之后,优先将最高优先级的帧发送给客户端。
不过HTTP2.0没有规定优先级的具体算法,那么这种策略就需要开发着自行来解决。
3.流量控制。
4.服务器推送
5.首部压缩
2.帧的类型
在二进制分帧的结构中,头部有8个字节(64Bit),其中有一个字节(8Bit)来标志帧的类型:
HTTP2.0规定了如下帧类型:
DATA: 用于传输HTTP消息体
HEADERS:用户传输关于流的额外的首部字段
PRIORITY:用户指定或者重新指定引用资源的优先级
RST_STRING:用于通知流的非正常终止
SETTINGS:用于通知两端通信方式的数据配置
PUSH_PROMISE:用于发出创建流和服务器引用资源的要约
PING:用于计算往返时间,执行“活性”检查
GOAWAY:用于通知对端停止在当前连接的创建流
WINDOW_UPDATE:用于针对个别流或个别连接实现流量控制
CONTINUATION:用于继续一系列首部块片段
2.1 建立新流
客户端通过发送HEADERS帧来创建新流,这个帧包含带有新流ID的公用首部、可选的31位优先级,以及一组HTTP键-值对首部。
服务器通过发送PUSH_PROMISE帧来发起推送流,这个帧与HEADERS帧等效,但它包含“要约流ID”,没有优先级。
注意:由于流的元数据与应用数据是单独发送的,因此客户端和服务器可以分别给它们设定不同的优先级。比如,“流量控制”的流优先级可以高一些,
但只将其应用给DATA帧
2.2 发送应用数据
创建新流并发送HTTP首部之后,接下来就是利用DATA帧发送应用数据。应用数据可以分成多个DATA帧,最后一帧要翻转首部的END_STREAM字段。
3.Comet、SSE、技术
3.1.概念:
利用长时间保留的HTTP请求(‘挂起的GET’)来让服务器向浏览器推送数据的技术,经常被称为Comet。
SSE让服务器可以向客户端流式发送文本消息,比如服务器上生成的实时通知或更新。
4.HTTP1.1和HTTP2.0的联系和传输的过程。
HTTP1.1的语义需要经过HTTP2 frame的封装,比如Get请求会经过HEADERs frame封装,Post请求的body需要经过HTTP2 data frame的封装。再然后就来到TLS协议,传输加密层,这里为什么会有加密?事实上HTTP2 RFC7540规定,HTTP2有两种实现,一种是H2,需要强制加密;还有一种H2C,这里的C是指clear,就是明文,不需要加密的意思。虽然协议规定有两种实现,但是现在所有的主流实现,包括所有的客户端,chrome,firefox,ie,safari和所有的操作系统,都是强制使用的TLS加密。加密层再往下就来到了大家用的很多的TCP层。TCP接着往下就到了IP网络层,以及以太网链路层再经过运营商网络物理层等等到达服务端,然后经过相同的协议栈进行处理。
HTTP2.0的二进制分帧的更多相关文章
- HTTP2.0 简明笔记
前言 RFC2616发布以来,一直是互联网发展的基石.HTTP协议也成为了可以在任何领域使用的核心协议,基于这个协议人们设计和部署了越来越多的应用.HTTP的简单本质是其快速发展的关键,但随着越来越多 ...
- HTTP2.0简明笔记
版权声明:本文由史燕飞原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/82 来源:腾云阁https://www.qcloud ...
- HTTP2.0探究
http1.1和http2.0在请求379张图片的对比演示(HTTP2.0性能惊人). HTTP2.0是HTTP协议自1999年HTTP1.1发布后的首个更新,主要基于SPDY(读speedy). ...
- 前端性能优化的另一种方式——HTTP2.0
最近在读一本书叫<web性能权威指南>谷歌公司高性能团队核心成员的权威之作. 一直听说HTTP2.0,对此也仅仅是耳闻,没有具体研读过,这次正好有两个篇章,分别讲HTTP1.1和HTTP2 ...
- http2.0
HTTP2.0性能增强的核心:二进制分帧 HTTP 2.0最大的特点: 不会改动HTTP 的语义,HTTP 方法.状态码.URI 及首部字段,等等这些核心概念上一如往常,却能致力于突破上一代标准的性能 ...
- http2.0笔记
二进制分帧层 定义了如何封装 HTTP 消息并在客户端与服务器之间传输 http2.0的消息传输特点: 流 已建立的连接上的双向字节流 消息 与逻辑消息对应的完整的一系列数据帧 帧 http2.0通信 ...
- HTTP协议以及HTTP2.0/1.1/1.0区别
HTTP协议以及HTTP2.0/1.1/1.0区别 一.简介 摘自百度百科: 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所 ...
- HTTP1.0,HTTP1.1,HTTP2.0的主要特征对比
HTTP1.0 是一种无状态.无连接的应用层协议. HTTP1.0规定浏览器和服务器保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器处理完成后立即断开TCP连接(无连接),服务 ...
- http2.0可行性研究
一.http2比http1有了更多新特性 1.使用了多路复用的技术,并发量支持比http1大几个数量级: 2.二进制分帧,改善网络延迟情况,提高传输速率: 3.支持header的数据压缩,数据体积变 ...
随机推荐
- [转]SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
原文地址:http://blog.csdn.net/zhshulin/article/details/37956105#comments 使用SSM(Spring.SpringMVC和Mybatis) ...
- Java设计模式(二) 观察者模式
观察者模式: 定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,他的所有依赖者都会受到通知并自动更新. 1,定义事件源接口 package com.pattern.observer; pub ...
- 提示reg不是批处理命令怎么办
'regsvr32' 不是内部或外部命令,也不是可运行的程序或批处理文件.请按任意键继续. . . 系统环境变量被改了进入控制面板>高级>环境变量>系统变量,Path双击一下,填入C ...
- VS2013无法启动IIS Express Web的解决办法
关于 ASP.NET Web 开发服务器.本地 IIS和 IIS Express 的区别,请参见<VS2013无法启动IIS Express Web的解决办法>, 此文章最后提到的部分,即 ...
- Leetcode 376. Wiggle Subsequence
本题要求在O(n)时间内求解.用delta储存相邻两个数的差,如果相邻的两个delta不同负号,那么说明子序列摇摆了一次.参看下图的nums的plot.这个例子的答案是7.平的线段部分我们支取最左边的 ...
- 【BZOJ-1952】城市规划 [坑题] 仙人掌DP + 最大点权独立集(改)
1952: [Sdoi2010]城市规划 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 73 Solved: 23[Submit][Status][ ...
- HDU2222 Keywords Search
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...
- hdu 5237 二进制
很无聊的模拟题...mark几个有用的小程序: 字符->二进制ASCII码 string tobin(char c) { string t; ; i<; i++) { t=+)+t; c/ ...
- dedecms /member/uploads_edit.php SQL Injection Vul
catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 Dedecms 5.3版本下的member/uploads_edit.p ...
- PHP守护进程
php也是可以直接进行守护进程的启动与终止的,相对于shell来说会简单很多,理解更方便,当然了php的守护进程要实现自动重启还是要依赖于shell的crontab日程表,每隔一段时间去执行一次脚本看 ...