前情提要

在上一篇文章《【HTTP
2.0】 简介(Introduction)
》中,我们简单介绍了 HTTP 2。

在本篇文章中,我们将会了解到 HTTP 2 协议概述部分的内容。

HTTP/2 协议概述(HTTP/2 Protocol Overview)

HTTP 2 优化了 HTTP 传输部分的语义。HTTP 2 支持 HTTP 1.1 中所有的特性,它旨在通过多种方法提升 HTTP 的效率。

HTTP 2 协议的基础单元是帧(Frame)(参考章节
4.1
)。每种帧的目的各不相同。比如,HEADERS 帧和 DATA帧组成了 HTTP 的请求和相应(参考章节
8.1
)。其他类型的帧则用于支持 HTTP 2 的其他特性,比如 SETTINGS、WINDOW_UPDATE 和 PUSH_PROMISE。

每一个 HTTP 通过在其流(参考章节
5
)中关联请求与相应,以实现请求的多路复用。流与流之间是相互独立的,所以,一个挂起的或者慢速的请求或响应,将不会影响其他流的进度。

通过流量控制和优先级来保证流的多路复用效率。流量控制(参考章节
5.2
)保证可用数据能够传达至接收者。优先级(参考章节
5.3
)保证有限的资源能够最先被应用在最重要的流中。

HTTP 2 新增了互动模式,以实现服务器主动推送响应内容至客户端(参考章节
8.2
)的功能。服务器推送技术允许服务器预测客户端所需的数据,并推送至客户端,通过付出一些网络资源来降低等待延迟。服务器通过发送 PUSH_PROMISE 帧,建立合成请求,之后便可以通过合成请求在单独的流中发送响应信息。

在一个连接中包含大量重复的 HTTP 报头字段,帧中包括了这些字段,并对其进行了压缩(参考章节
4.3
)。在大多数情况下,这有利于请求大小的优化,允许很多请求被压缩至一个数据包。

文档组织结构

HTTP 2 规范分为以下四部分:

  • 发起 HTTP 2(第3章)包括了如何初始化一个
    HTTP 2 连接。
  • 帧层(第4章)和流层(第5章)描述了
    HTTP 2 中帧的构成,以及如何形成多路复用流。
  • 帧定义(第6章)和异常定义(第7章)包括了
    HTTP 2 中的帧的详细信息以及异常的类型。
  • HTTP 映射(第8章)和附加要求(第9章)描述了
    HTTP 语法是如何表达帧和流的。

帧和流的概念有一部分是独立于 HTTP 的,本规范没有定义完全通用的帧层。帧和流是根据 HTTP 协议以及服务器推送而定制的。

约定和术语

本文档中的关键词 “MUST”,“MUST NOT”,“REQUIRED”,“SHALL”,“SHALL NOT”,“SHOULD”,“SHOULD NOT”,“RECOMMENDED”,“MAY”,“OPTIONAL”如 RFC
2119
 中所描述的进行解读。

所有数值都是按网络字节顺序。值均为无符号,除非进行特殊说明。字面量通过十进制或者十六进制表示。十六进制字面量以 0x 作为前缀,以区别于十进制字面量。

以下术语用于:

客户端(client):

发起一个 HTTP 2 连接的终端。客户端发送 HTTP 请求,并接收 HTTP 响应。

连接(connection):

两个终端之间的传输层连接。

连接错误(connection error):

影响整个 HTTP 2 连接的错误。

终端(endpoint):

连接中的客户端或者服务器。

帧(frame):

一个 HTTP 2 连接内通信的最小单位。是一个由报头和帧类型(八种帧类型之一)所组成的可变长度序列。

点(peer):

点是一个终端。当讨论一个特定终端时,“点”指代的是讨论的主题所对应的远程终端。

接收者(receiver):

接收帧的终端。

发送者(sender):

发送帧的终端。

服务器(server):

接受 HTTP 2 连接的的终端。服务器接收 HTTP 请求,并发送 HTTP 响应。

流(stream):

HTTP 2 连接中双向流动的帧。

流错误(stream error):

独立的 HTTP 2 流中产生的错误。

最后,术语“网关”,“中介”,“代理”和“隧道”在 RFC
7230
 的 2.3
章节
中有所定义。中介在不同的时候即充当客户端又充当服务器。

术语“有效载荷体”在 RFC
7230
 的 3.3
章节
中有所定义。


本文以 CC
BY-NC-SA 3.0 CN
 协议共享,转载、共享及二次创作时请保留原文出处及链接,请勿用于商业用途。

本文链接:http://litecodes.com/dev/http-2-spec-protocol-overview/

本系列文章将会在我的 GitBook:http2-spec-zh 同步更新,

下一篇文章将会翻译协议的第三部分:Starting HTTP/2(发起 HTTP 2),不要错过哟~

【HTTP 2】HTTP/2 协议概述(HTTP/2 Protocol Overview)的更多相关文章

  1. javaweb学习总结十九(http协议概述以及http请求信息分析)

    一:http协议概述 1:http协议定义 2:使用telnet程序连接web服务器,获取资源 3:http协议:超文本传输协议,它是基于tcp/ip协议,就是建立在tcp/ip之上工作的, http ...

  2. 嵌入式linux的网络编程(1)--TCP/IP协议概述

    嵌入式linux的网络编程(1)--TCP/IP协议概述 1.OSI参考模型及TCP/IP参考模型 通信协议用于协调不同网络设备之间的信息交换,它们建立了设备之间互相识别的信息机制.大家一定都听说过著 ...

  3. JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用

    JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例, ...

  4. 【高速接口-RapidIO】1、RapidIO协议概述

    一.RapidIO背景介绍 RapidIO是由Motorola和Mercury等公司率先倡导的一种高性能. 低引脚数. 基于数据包交换的互连体系结构,是为满足和未来高性能嵌入式系统需求而设计的一种开放 ...

  5. 1.RapidIO协议概述

    转自https://www.cnblogs.com/liujinggang/p/9925859.html 一.RapidIO背景介绍 RapidIO是由Motorola和Mercury等公司率先倡导的 ...

  6. [编程] TCP协议概述

    TCP 协议概述 1.TCP提供一种面向连接的.可靠的字节流服务. 2.两个应用程序通过TCP连接交换8bit字节构成的字节流. 3.每个TCP首部都包含源端和目的端的端口号,用于寻找发端和收端应用进 ...

  7. 搞懂分布式技术4:ZAB协议概述与选主流程详解

    搞懂分布式技术4:ZAB协议概述与选主流程详解 ZAB协议 ZAB(Zookeeper Atomic Broadcast)协议是专门为zookeeper实现分布式协调功能而设计.zookeeper主要 ...

  8. arp:地址解析协议(Address Resolution Protocol)(来自维基百科)

    地址解析协议(Address Resolution Protocol),其基本功能为通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。它是IPv4中网络层必不可少的协议,不过在I ...

  9. 协议端口号(protocol port number)

    协议端口号(protocol port number) 先来个注意事项 (-> ->) 这种在协议层间的抽象的协议端口是软件端口,和硬件端口是完全不同的概念.硬件端口是不同设备进行交互的接 ...

随机推荐

  1. URL中#(井号)的作用(转)

    2010年9月,twitter改版. 一个显著变化,就是URL加入了"#!"符号.比如,改版前的用户主页网址为 http://twitter.com/username 改版后,就变 ...

  2. android 关于LCD背光调节渐变过程引起背光闪烁问题

    如果背光渐变过程会引起背光闪烁,可以采取以下任意一种方法修改:   方法1.减少调节级别时间 http://blog.csdn.net/sergeycao   默认的设计在关闭背光时会有灭屏动画,就是 ...

  3. HTTP协议是无状态协议,怎么理解?

     Http是一个无状态协议,同一个会话的连续两个请求互相不了解,他们由最新实例化的环境进行解析,除了应用本身可能已经存储在全局对象中的全部信息外,该环境不保存与会话有关的不论什么信息. 自己的理解,在 ...

  4. hdu1867之KMP

    A + B for you again Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  5. asp.net连接ORACLE数据库

    这段时间维护客户的一个系统,该系统使用的是ORACLE数据库,之前开发的时候用的都是MSSQL,并没有使用过ORACLE.这两种数据库虽然都是关系型数据库,但是具体的操作大有不同,这里作下记录. 连接 ...

  6. objective-C学习笔记(二)类 class 和 结构 struct

    Objective-C的类型 引用类型 类 class 指针 pointer 块 block 值类型 基础数值类型 结构 struct 枚举 enum 类型装饰 协议 protocol 类别 cate ...

  7. URAL DP第一发

    列表: URAL 1225 Flags URAL 1009 K-based Numbers URAL 1119 Metro URAL 1146 Maximum Sum URAL 1203 Scient ...

  8. Web Api Route 注册要放在 Mvc Route 注册前

    今天想研究一下Web Api,写了一个测试Api,打开网站后浏览一下,可是却提示找不到方法,刚开始以为哪里配置错了,可找了半天也没见. 因为我是在一个现有Mvc站点做的Demo,所以打算新建一个Mvc ...

  9. QT通过IP地址定位地址(用get方法取数据)

    通过IP地址定位地址,是要通过查询数据库,如果自己做一个这样的数据库工作量就比较大,所以在网上找了一个查询IP地址的网址,通过调用这个网址查询来实现,但是这个有一定的弊端,如果没有网络或者这个网址不可 ...

  10. Unable to connect to your virtual device!解决方法

    使用Genymotion安卓模拟器的用户,很多朋友在启动安卓系统的时候就弹出了以下英文,不知道如何处理,今天电脑知识网小编来教您处理Genymotion安卓模拟器启动出错的问题. Error Unab ...