HTTP历史与HTTP/2新特性

HTTP/2协议

Http是超文本传输协议(Hypertext Transfer Protocol Bis)的下一代版本, Http2.0只用于https://网址, 目的是在开放互联网上增加使用加密技术, 已提供强有力的保护.

Http/2 主要提供了三个新特性 :

  1. 异步连接多路复用.
  2. 头部压缩.
  3. 新的二进制格式(binary Format).
  4. 服务端推送(server push).

在讲Http/2之前, 先讲讲HTTP是什么?

超文本传输协议HTTP

1. 什么是HTTP协议?

在我们作为用户访问互联网的时候, 随时随地都用到了HTTP协议.在我们使用浏览器上网的时候, 浏览器和服务器之间的请求和响应的交互, 必须按照规定的格式和遵循一定的规则. 我们把这些格式和规则称为超文本传输协议HTTP.

HTTP协议主要的几个特别:

  1. 它底层使用的是面向连接的TCP作为运输层协议, 保证数据的可靠传输.
  2. HTTP本身是一个无状态的协议, 即它不要求服务器保留客户的任何状态.
2. 持久连接和非持久连接

HTTP协议有众多的版本, 在最早的HTTP0.9版本中, HTTP协议只支持一些简单的GET操作, 服务器返回一些HTML的文档.

在HTTP1.0中引入了POST和HEAD命令, 是的浏览器和服务器之间有了更多交互的动作. 但是这个版本的HTTP是一个非持久连接的方式, 即每一次请求/响应都会对应一个TCP连接, 每一次请求都会建立TCP连接, 收到响应后就会断开TCP连接. 浏览器会把请求报文放在TCP三次握手的第三次中, 作为TCP确认报文发送给服务器, 服务器收到请求后把响应报文发给浏览器. 也就是说发送一次HTTP请求, 至少需要两个RTT(传输往返时间).

在1997年, HTTP1.1版本发布, 引入了持久连接, 这个版本的HTTP协议也是我们直到今天大量使用的. 1.1版本主要引入的两个特性:

  1. 持久连接
  2. 流水线机制(pipelining)

持久连接就是为了解决上述HTTP1.0的非持久连接带来的问题, 让同一个TCP连接能够被多个请求所复用. 一般的规范做法是在客户端最后一个请求, 发送Connection:close , 明确要求服务器关闭TCP连接. 目前浏览器默认会打开6个连接.

流水线工作的方式, 即浏览器在收到HTTP的响应报文之前就能够连续发送多个请求报文. 这样一个接一个请求报文到达服务器, 服务器就可以一个接一个发回响应报文, 能够节省很多个RTT时间.

问题点:

  1. HTTP1.1 解决了HTTP1.0的非持久连接问题, 同时引入了流水线工作的方式, 但是流水线工作带来了一个新的问题就是线头阻塞, 所谓的线头阻塞是由于请求端和服务端采用了FIFO队列. 也就是说请求和响应的顺序必须完全一致. 比如浏览器再用一个TCP连接中, 连续发了两个请求, 但是第一个请求处理的慢, 第二个请求处理的快, 这个时候只能等第一个请求处理完之后,才能算完成.
  2. 大部分浏览器的pipelining模式是关闭的. 线头阻塞的消耗/避免线头阻塞需要开启两个TCP连接, 代价过大.

SPDY

在了解HTTP2之前, 先了解一个SPDY, 因为HTTP2其实就是在SPDY的基础上完成的. SPDY协议是Google开发的一个会话层协议. 这个协议是工作在HTTP和TCP之间的会话层, 通过这个协议对HTTP做了增强. 该协议的功能主要有: 数据流的多路复用, 请求优先级及HTTP报头压缩. Google说能够将页面加载时间减少50%.

SPDY的强制使用SSL协议. 也就是原本的TCP上面是HTTP协议的架构变成了如下图 :

HTTP
SPDY
SSL
TCP

在SSL上层增加了SPDY会话层, 可以再同一个TCP连接中实现并发流.

HTTP/2

在文章的开头已经提到了HTTP/2 带来的几个全新的特性, 下面我们就一一探讨这几个特性 :

1. 异步连接多路复用

由于HTTP/2 采用了二进制的数据格式, 以前文本的数据必须要按照顺序才能完成拼接, 现在使用二进制数据帧, 只需要给每个数据块一个标识的index, 就可以标识这个数据库属于第几个, 然后在同一个TCP连接中, 请求/响应都可以直接发送. 所谓的多路复用就是在用一个TCP连接中, 可以发送不同的数据流的不同数据帧, 服务端或者客户端可以用过数据流+数据帧的标识将数据进行组装, 能够最大程度的避免HTTP1.1中的线头阻塞.

2. 头部压缩

Web功能越来越的复杂, 每个页面可能会对应上百个请求, 因此头部消耗的流量越来越多, 同时HTTP头部的内容也是非常冗余和大量的重复, 会导致不必要的流量浪费, 并导致初始的TCP拥塞窗口快速填满, 当一个新的TCP连接上发出多个请求的时候, 可能会导致延迟过长.

3. 新的二进制格式

HTTP/2 采用了二级制的协议方式, 而HTTP/1.1之前头部都是文本协议, 而内容部分可以是文本也可以是二进制. 二进制协议和文本协议的区别在于 :

  1. 二级制协议的解析效率很高. 但是文本协议的可读性更好.
  2. 二级制协议的内容都是01因此不存在冗余重复字段. 而文本协议存在这种问题. 因此二进制协议占用的带宽更少.
4. 服务端推送

英文叫server push, 运行的过程就比如, 请求一个网址, 第一次http去请求服务端的HTML文件, 然后服务端自主将与之相关的css和js文件一并推送过来,就是一种服务端推送的场景.

服务端推送的定义是 : HTTP/2允许服务器未经请求, 主动向客户端发送一些资源, 这个叫做服务端推送.

具体推送实践可以参考腾讯的一个实践, 参考链接第5条.

扩展知识 :

  1. gRpc是什么? gRPC 官方文档中文版_V1.0 (oschina.net)

    gRPC是基于HTTP/2高性能高可靠的RPC框架

  2. QUIC : QUIC_百度百科 (baidu.com)

    QUIC是google开发的, 基于UDP的可以完成可靠传输的传输层协议

参考链接 :

  1. SPDY

  2. HTTP1.0、HTTP1.1 和 HTTP2.0 的区别 - _浪潮之巅.☆ - 博客园 (cnblogs.com)

  3. RFC7541 HPACK: Header Compression for HTTP/2 (httpwg.org)

  4. RFC7540 Hypertext Transfer Protocol Version 2 (HTTP/2) (httpwg.org)

  5. HTTP/2之服务器推送(Server Push)最佳实践 - 腾讯云+社区 - 博客园 (cnblogs.com)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容