129 views

HTTP/2标准的发展 5 – 几个小矮人(SM,NF,WAKA)

image

几个SPDY之外的HTTP/2标准参与者,矮人虽小却不仅仅跑龙套,有些提案对于对HTTP/2标准形成也有影响。例如,SPDY中强制使用SSL遭到了反对,最终HTTP/2文档中也参考了微软等意见,提供了明文HTTP/2协议支持。

1. HTTP Speed+Mobility (SM)

 

image

【SM】draft是微软提交的Draft,只更新到版本02,12年就过期了。

1.1 SM对SPDY的质疑

移动设备的电池问题:

对于mobile device,embedded sensor等,speed不是需求的全部,只是一个考虑因素,耗电也很重要。

压缩不是必须的:

省电角度考虑,另外HTTP Header冗余可以通过“use a single larger transfer”来缓解。

加密不是必须的:

省电以及实际部署,例如在trust域内HTTP/2 Client和 Server没必要加密

Server Push没必要:

浏览器的cache机制已经很强大了。

一言以蔽之

SPDY之中的不少设计的出发点不是通用需求,而是特殊需求。

对于微软的质疑【SM Comments】提出了反质疑,指出一些常识性错误。

1.2 SM协议内容

SM的主要内容是保留多路复用(multiplexing)机制,但完全照搬SPDY设计。不同之处只是借用WebSocket承载数据。因为要支持明文HTTP/2,无法使用SSL扩展机制协商,使用了HTTP/1.1 Upgrade header, 下面是一个握手的例子:

Client:

 

Server:

 

Stream信令设计上,也照搬了SPDY的多数概念

A) SYN_STREAM RST_STREAM SYN_REPLY CREDIT_UPDATE

B) Name/Value Header Block

C) Header压缩

D) 流量控制:

Stream Priority

Credit Control – 就是SPDY windows update,换了一个词汇。

【SM_DRAFT】的6.2. Relationship to SPDY章节描述了和SPDY的关系,微软承认,全盘拷贝SPDY的概念。

总之,微软的协议没有太多实质内容。

2. Network-Friendly HTTP(NF)

这里仅描述【NF】有新意的地方,NF对于HTTP header压缩有自己简单的提案:

image

如上图所示,HTTP连接包括4个请求,NF将请求中的HTTP headers归类。

1.Transport Frame

所有消息都包括的headers,仅传输一次。

2.Common Frame

仅在连续几个消息中相同的header,也仅传输一次。

3.其他消息类型

Message Frame – 仅仅用与传输HTTP header,没有body

Entity frame – 传输body或body的一部分

Control frame – 传输Ping/Pong/Pause/ Abort/Close等

 

3. Waka

image

waka是原意是一种独木舟。这个提案最古老,2002年提出来的。作者就是HTTP协议的原作者,RESTful软件风格的提出者Roy Fielding。waka没有IETF提案,没有代码,没有细节描述,只有一篇PPT。可以看作Roy的一个头脑风暴。
它的价值在于,总结了HTTP的问题,为后续提案指明了道路。

image

【参考】

1.SM_Draft – http://tools.ietf.org/html/draft-montenegro-httpbis-speed-mobility-02

2.SM Comments – https://www.belshe.com/2012/03/29/comments-on-microsofts-spdy-proposal/

3.SM Wiki – http://en.wikipedia.org/wiki/Microsoft_SM

4.NF – http://tools.ietf.org/html/draft-tarreau-httpbis-network-friendly-00

5.waka: A replacement for HTTP,Roy T. Fielding, Ph.D.

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">