在上一篇文章《【HTTP 2.0】 简介(Introduction)》中,咱们简单介绍了 HTTP 2。html
在本篇文章中,咱们将会了解到 HTTP 2 协议概述部分的内容。git
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 帧,创建合成请求,以后即可以经过合成请求在单独的流中发送响应信息。spa
在一个链接中包含大量重复的 HTTP 报头字段,帧中包括了这些字段,并对其进行了压缩(参考章节 4.3)。在大多数状况下,这有利于请求大小的优化,容许不少请求被压缩至一个数据包。翻译
HTTP 2 规范分为如下四部分:代理
帧和流的概念有一部分是独立于 HTTP 的,本规范没有定义彻底通用的帧层。帧和流是根据 HTTP 协议以及服务器推送而定制的。code
本文档中的关键词 “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),不要错过哟~