HTTP/2

✍ dations ◷ 2025-11-16 03:20:58 #HTTP/2

HTTP/2(超文本传输协议第2版,最初命名为HTTP 2.0),简称为h2(基于TLS/1.2或以上版本的加密连接)或h2c(非加密连接),是HTTP协议的的第二个主要版本,使用于万维网。

HTTP/2是HTTP协议自1999年HTTP 1.1的改进版RFC 2616发布后的首个更新,主要基于SPDY协议。它由互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis(httpbis)工作小组进行开发。该组织于2014年12月将HTTP/2标准提议递交至IESG(英语:Internet_Engineering_Steering_Group)进行讨论,于2015年2月17日被批准。

HTTP/2标准于2015年5月以RFC 7540正式发表。HTTP/2的标准化工作由Chrome、Opera、Firefox、Internet Explorer 11、Safari、Amazon Silk(英语:Amazon Silk)及Edge等浏览器提供支持。

多数主流浏览器已经在2015年底支持了该协议。此外,根据W3Techs的数据,截至2021年10月,全球有46.5%的网站支持了HTTP/2。

协议制定伊始,工作组章程关注了下列目标和受关心的问题:

Facebook对各方案进行了评价并最终推荐了SPDY协议。HTTP 2.0的首个草稿于2012年11月发布,其内容基本和SPDY协议相同。

HTTP/2相比HTTP/1.1的修改并不会破坏现有程序的工作,但是新的程序可以借由新特性得到更好的速度。

HTTP/2保留了HTTP/1.1的大部分语义,例如请求方法、状态码乃至URI和绝大多数HTTP头字段一致。而HTTP/2采用了新的方法来编码、传输客户端和服务器之间的数据。

SPDY(发音同“speedy”)是一个由Google主导的HTTP替代协议。SPDY一开始主要关注降低延迟,采用了TCP通道,但是使用了不同的协议来达到此目的。其与HTTP/1.1相比,主要的改变有:

HTTP/2的开发基于SPDY进行跃进式改进。在诸多修改中,最显著的改进在于,HTTP/2使用了一份经过定制的压缩算法,基于霍夫曼编码,以此替代了SPDY的动态流压缩算法,以避免对协议的Oracle攻击——这一类攻击以CRIME为代表。此外,HTTP/2禁用了诸多加密包,以保证基于TLS的连接的前向安全。

在HTTP/2的第一版草案(对SPDY协议的复刻)中,新增的性能改进不仅包括HTTP/1.1中已有的多路复用,修复队头阻塞问题,允许设置设定请求优先级,还包含了一个头部压缩算法(HPACK)。此外, HTTP/2采用了二进制而非明文来打包、传输客户端和服务器之间的数据。

有别于HTTP/1.1在连接中的明文请求,HTTP/2与SPDY一样,将一个TCP连接分为若干个流(Stream),每个流中可以传输若干消息(Message),每个消息由若干最小的二进制帧(Frame)组成。这也是HTTP/1.1与HTTP/2最大的区别所在。HTTP/2中,每个用户的操作行为被分配了一个流编号(Stream ID),这意味着用户与服务端之间创建了一个TCP通道;协议将每个请求分割为二进制的控制帧与数据帧部分,以便解析。这个举措在SPDY中的实践表明,相比HTTP/1.1,新页面加载可以加快11.81%到47.7%

HPACK算法是新引入HTTP/2的一个算法,用于对HTTP头部做压缩。其原理在于:

网站为了使请求数减少,通常采用对页面上的图片、脚本进行极简化处理。但是,这一举措十分不方便,也不高效,依然需要诸多HTTP链接来加载页面和页面资源。

HTTP/2引入了服务器推送,即服务端向客户端发送比客户端请求更多的数据。这允许服务器直接提供浏览器渲染页面所需资源,而无须浏览器在收到、解析页面后再提起一轮请求,节约了加载时间。

截至2015年末,主要的浏览器的最新版本已经支持HTTP/2这一协议。其中:

HTTP/2的设计本身允许非加密的HTTP协议,也允许使用TLS 1.2或更新版本协议进行加密。协议本身未要求必须使用加密, 惟多数客户端(例如Firefox、Chrome、Safari、Opera、IE和Edge等)的开发者声明,他们只会实现通过TLS加密的HTTP/2协议,这使得经TLS加密的HTTP/2成为了事实上的强制标准,而h2c事实上被主流浏览器废弃。

2015年9月,Google宣布了移除对SPDY支持的计划,拥抱HTTP/2,并将在Chrome 51中生效。

HTTP/2工作组在其官方Github上罗列了诸多已经支持该协议的代码实现。

HTTP/2的开发过程乃至协议本身都曾受到批评。

FreeBSD和Varnish cache的开发者保罗-恒宁·坎瀑(英语:Poul-Henning Kamp)批评称,这个标准文件的准备过程短得不切实际,而且未基于除了SPDY之外的任何协议,以至于其他协议失去了对草案进行改进的机会。Kampala批评说,这个协议本身与HTTP不一致,而且还毫无必要地变得极为复杂。他还认为,这个协议违背了互联网协议的分层原则,例如说,将本属于TCP传输层的流控制(flow control)功能放入了协议中。

一开始,以HTTP工作组某位主席为首的成员在邮件列表建议引入强制使用TLS协议实现的HTTP/2(Mandatory TLS in HTTP/2.0),这招致了争议。批评者认为,加密增加了十分不必要的开销,而且很多HTTP服务实际上无需加密,提供者也无意为此花费更多的资源。而支持者认为,实践中TLS加密的开销微不足道。

Poul-Henning Kamp批评IETF在制定HTTP/2时,遵循了一个特定的“政治议程”(political agenda),压缩了讨论的空间。

强制加密议程的批评者认为,其基于现有的证书框架,对于开源社区并非新创造,亦不是独特的。2013年,一位思科员工表示,现有证书模型与路由器一类的小型化设备并不兼容,因为现有的证书框架需要为每张证书付出不可避免的成本,还需要进行每年更新的流程。工作组最终未能在强制加密这一点上达成一致,但是大部分客户端只实现了基于TLS的HTTP/2,使之成为事实标准。

HTTP/2也被批评未能支持机会性加密,即类似SMTP中存在已久的STARTTLS一样能抵御被动监控(英语:passive monitoring)的措施。 批评者指出,HTTP/2的提议违背了IETF自身制定的《最佳实践 188》(BCP 188) 即 RFC 7258。这份文件指出,被动监控应被当作一种攻击,IETF指定的标准应当设置抵御这种攻击的措施(例如机会性加密)。目前,已经有一系列机会性加密规范被提出,工作组也制定了draft-ietf-httpbis-http2-encryption-01这一官方版方案。

相关

  • 摄影处理冲洗 (又称底片冲洗) 是一种利用化学方法, 让底片或相纸在曝光之后产生正像或负像的过程。 这个过程让底片上的潜像 (不可见且容易受可见光破坏) 转变为稳定可见的影像。大多
  • 陆军装甲兵学院中国人民解放军陆军装甲兵学院,简称陆军装甲兵学院,本部位于北京市丰台区,隶属中国人民解放军陆军,是培养装甲兵指挥、参谋、技术保障军官和指挥管理、维修保障士官的综合性高等
  • 气部气部,为汉字索引中的部首之一,康熙字典214个部首中的第八十四个(四划的则为第二十四个)。就中文而言,气部归于四划部首。气部通常从右上方为部字。且无其他部首可用者将部首归为
  • 华朗廷华朗廷(Pierre-Sylvain Valentin,1880年12月11日-1962年1月7日),巴黎外方传教会会士,天主教康定教区主教(1936年8月6日-1962年1月7日)。1880年12月11日,华朗廷出生在法国福雷地区于松
  • 斋藤仁弘斋藤仁弘(さいとう ひとひろ,1957年2月12日-),日本合气道家。他是斋藤守弘师范(9段)的儿子和继承人。斋藤仁弘出身于茨城县岩间町,从7岁开始就跟着植芝盛平(合气道缔造者)开始学习
  • 恰帕尔恰帕尔(Chapar),是印度阿萨姆邦Dhubri县的一个城镇。总人口18559(2001年)。该地2001年总人口18559人,其中男性9560人,女性8999人;0—6岁人口2540人,其中男1315人,女1225人;识字率64.52%
  • 冈野荣太郎冈野荣太郎(日语:岡野 栄太郎 ,1930年6月14日-2020年11月17日)是日本前短跑运动员,曾代表日本参加1952年夏季奥林匹克运动会短跑比赛。他也曾获得1951年亚洲运动会男子400米和400
  • 埃尔 (神)埃尔(闪米特语转写:ʾĒl;Ugaritic:��,腓尼基语:��‬;Classical Syriac:ܐܠ‎;希伯来语:אל‎;阿拉伯语:إل‎ 或 إله‎),又译为伊勒、以利、厄勒,在西北闪语(英语:Northwest Semitic languages)中,是“神明”的意思。在迦南人与黎凡特的宗教中,埃尔(又被写为或 )是最高的神明,众神之主,人类以及所有受创造物的祖先。迦南宗教中所提到的“神祇会议adapt El”即显示主持者为埃尔。在埃勃拉文明,埃尔被视为是众神之祖或是众神之父的名称。公牛是埃
  • 838年
  • 1896年夏季奥林匹克运动会单车比赛-男子争先赛在1896年夏季奥林匹克运动会单车比赛中,男子争先赛是五项赛道自行车赛事之一,按比赛赛程是第二项进行的自行车比赛,于 4 月 11 日举行。争先赛比赛距离为 2 公里,即是赛道的 6 圈。法国选手保罗·马松赢得这项赛事的冠军,他的队友莱昂·弗拉芒获得了铜牌,希腊的尼科洛普洛斯获得银牌。比赛共有四名运动员参加比赛,德国的约瑟夫·罗斯迈尔在比赛中途单车故障未完成就离场,法国两位自行车手获得第一和第三名,而希腊的尼科洛普洛斯获得第二名。