HTTP/2
HTTP/2 Discovery
- h2
- HTTP/2 over TLS
- h2c
- HTTP/2 is run over cleartext TCP
Starting HTTP/2 for "http" URIs
如果客户端无法事先知道服务端是否支持http2,可以通过HTTP Upgrade mechanism(定义在HTTP/1.1)中来实现,这样在之后的请求中可以采取HTTP/2。
GET / HTTP/1.1
Host: server.example.com
Connection: Upgrade, HTTP2-Settings
Upgrade: h2c
HTTP2-Settings: <base64url encoding of HTTP/2 SETTINGS payload>
这样的话,如果请求中由payload必须一次性发完。然后才能升级到HTTP/2。另一种办法是通过OPTIONS请求 来判断,这样做会多一次请求。
如果服务端不支持HTTP/2,返回中则不包含Upgrade header:
HTTP/1.1 200 OK
Content-Length: 243
Content-Type: text/html
否则,返回一个101 (Switching Protocols)响应:
HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: h2c
[ HTTP/2 connection ...
在h2c后面的空行之后,就可以开始发送HTTP/2的frame了。