HTTP/2 带来的新颖

Binary Frames

HTTP2 在TCP层之上 HTTP下增加了Binary Frames协议, 基于该协议HTTP Request/Response 可以被分拆成由Frame组成的Stream在TCP上传输。

Header Compression -- HPACK

使用HPACk压缩http header成二进制格式,使用静态和动态索引表来压缩Header内容。 对动态header value使用huffman算法编码成二进制格式。

详细信息可以参考:

Static Table Definition -- http://http2.github.io/http2-spec/compression.html#static.table.definition

Huffman Coding -- http://http2.github.io/http2-spec/compression.html#huffman.code

Stream & Multipexing

在同一条TCP链路上可以根据Stream的优先级,并发的错序发送不同Stream Frames

Server Push

Server可以就一个请求主动推送多个应答给客户端

 

Q&A

Browser和Web Server如何协商Http协议?

HTTP2 SPEC 3.2 介绍了Client应该如何使用Http的Upgrade头域协商Http协议从1到2的升级。

For example,

1. Client to Server

     GET / HTTP/1.1
     Host: server.example.com
     Connection: Upgrade, HTTP2-Settings
     Upgrade: h2c
     HTTP2-Settings: <base64url encoding of HTTP/2 SETTINGS payload>

 

2. Server to Client

  If YES for upgrading to HTTP/2,

   HTTP/1.1 101 Switching Protocols
     Connection: Upgrade
     Upgrade: h2c

     [ HTTP/2 connection ...

 

  If NO for upgrading to HTTP/2

  

     HTTP/1.1 200 OK
     Content-Length: 243
     Content-Type: text/html

     ...

借用Jerry Qu那个博客的总结,大概应该是这样:Browser使用Http1来问Server能不能Upgrade 到 h2c(httpd2), 如果可以,Server 就用http1.1回一个101,表示我能,那么接下来Browser就可以使用http2和Server通信,否则Server就回一个200,继续走http1咯。。。

Server Push如何工作?

HTTP/2 Server Push 定义讨论了Server Push的功能规范,但是没有具体讨论什么时候该如何使用该功能。

Jerry Qu的这篇博客就如何使用Server Push功能的进行了简单讨论。正如博客所说,具体的做法有很多种,比如Server端定义一些策略或通过学习来决定什么时候如何发送Push Response。另外就是客户端可以使用x-push-serve头域来请求Sever端应该使用Push方法发送应答。

参考

0. HTTP 2

https://hpbn.co/http2/

1. HTTP2 RFC

https://tools.ietf.org/html/rfc7540#page-12

2. HPACK

http://http2.github.io/http2-spec/compression.html

posted @ 2016-07-08 11:58  Anor  阅读(355)  评论(0编辑  收藏  举报