HTTP2学习笔记

HTTP2协议

HTTP的1.1的现状:

http1.1过于庞大,有很多实现的细枝末节很难彻底实现。导致客户端和服务端的互用性存在问题。

http 1.1很难榨干TCP协议所能提供的所有性能。

http1.1对网络延迟非常敏感,原因是HTTP pipelining还存在很多问题。

http1.1存在线头阻塞,虽然利用HTTP pipelinling技术可以把多个http请求放到一个TCP连接中一一发送,但是客户端还是需要按照发送顺序来接收响应。如果前一个请求非常耗时,那么后续请求都会受到影响,这就是所谓的线头阻塞。

曾经为了克服延迟的操作

Spriting

将小图合并成大图,再用前端技术进行切割。但是不利于缓存,当其中一张图片发生变化的时候,整张大图都要改变。

Inlining

通过内联,把图片数据直接放到css文件中。

Concatenation

通过拼接,将多个文件合并成一个文件。

Sharding

分片将服务分散在多个服务器上,来让客户端同时和多个主机建立多条链接,来提高效率。

http2

http2的前身是SPDY。

基于TLS之上的http2协商

有两个协商协议:SPDY使用NPN,HTTP2使用ALPN。他们两个的主要区别在于谁来决定通讯协议,ALPN由服务端选择,NPN又客户端选择。基于TLS时,可以不使用Upgrade来升级,而使用TLS的一个扩展来协商。

基于非TLS的http2

会先用一次通讯,客户端给服务端发送升级请求,服务端如果支持会返回“101 Switching”作为回复,则升级成http2,但是现在还没有任何主流浏览器支持非TLS的http2。

二进制的http2协议

HTTP2是一个二进制协议。

HTTP1.1是一个基于文本的协议,但是要针对开始和结束识别起来相当复杂,而压缩以及tls加密也降低了基于纯文本实现的价值。

多路复用的流

每个单独的HTTP2链接都可以包含多个并发的流,既然如此,那么会导致各个流的数据包会被混合在一起,到那时在终点处,会根据Stream Identifier重新组装,从而得到完整的数据。

优先级和依赖性

每个流都包含一个优先级,当资源有限的时候,服务端会根据优先级选择发送哪些流。

优先级和依赖关系可以在传输过程中被动态的改变。这样当用户在滚动一个全是图片的页面的时候,浏览器就能指定哪些图片拥有更高的优先级。或者在你切换便签页的时候,浏览器可以提升新切换到页面所包含流的优先级。

头压缩

http的头变得越来越大,但是存在大量一致的东西,这些东西值得被压缩。用的压缩算法是HPACK,更加安全。

重置

增加重置Content-Length的方法,通过RST_STREAM帧,而不是需要重新建立TCP请求。

服务器推送

当客户端需要资源X的时候,服务器知道它肯定还需要资源Y,就把Y也推送给客户端,这样客户端在想要Y资源的时候,会直接从缓存拿取。

流量控制

对于每个流来说,两端都必须告诉对方自己还有足够的空间来处理新的数据,而在该窗口被扩大前,另一端只能发这么多。

HTTP2协议详细内容

  • http/2通过定义一个优化的HTTP语义到底层链接的映射来解决一条连接只能一次请求,并可以高效地使用HTTP报头,还允许请求具有优先级,让更重要的请求更快地完成,进一步提高了性能。
  • http2支持http1.1的所有核心功能(持久连接,在响应后不关闭TCP通道,新增首部字段Host,客户端指名要访问的主机,使得服务端可以在统一域名的不同主机之间实现多个虚拟web站点,新增http pipelining,允许(GET,HEAD)同时发送等)
  • http2中基础的协议单元是帧,每个不同类型的帧都服务于不同的目的。比如HEADERS和DATA帧构成了基本的HTTP请求和应答。
  • 请求的多路复用即在每个HTTP请求/应答在各自的流中完成数据交换,由于每个流之间都是相互独立的,因此即使请求和应答被阻塞或者速度很慢都不会影响各自流中的处理流程。
  • 在请求者请求url之前,需要先确定上游服务器是否支持HTTP2
  • http的版本协议有两种标识符:h2代表建立在TLS上的HTTP2通讯,h2c代表不适用TLS协议。存在Upgrade。

所有的帧都以一个9字节的报头开始, 后接变长的载荷:

+-----------------------------------------------+
|                 Length (24)                   |
+---------------+---------------+---------------+
|   Type (8)    |   Flags (8)   |
+-+-------------+---------------+-------------------------------+
|R|                 Stream Identifier (31)                      |
+=+=============================================================+
|                   Frame Payload (0...)                      ...
+---------------------------------------------------------------+
  • Length: 载荷的长度, 无符号24位整型. 对于发送值大于2^14 (长度大于16384字节)的载荷, 只有在接收方设置SETTINGS_MAX_FRAME_SIZE为更大的值时才被允许

    注: 帧的报头9字节不算在length里.

  • Type: 8位的值表示帧类型, 决定了帧的格式和语义. 协议实现上必须忽略任何未知类型的帧.

  • Flags: 为Type保留的bool标识, 大小是8位. 对确定的帧类型赋予特定的语义, 否则发送时必须忽略(设置为0x0).

  • R: 1位的保留字段, 尚未定义语义. 发送和接收必须忽略(0x0).

  • Stream Identifier: 31位无符号整型的流标示符. 其中0x0作为保留值, 表示与连接相关的frames作为一个整体而不是一个单独的流.

stream标识符:客户端使用奇数,服务端使用偶数。

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