HTTP/2.0 帧
HTTP/1.1基于字符串
HTTP/2.0基于帧Frame(二进制)
前面9个字节 72位表示 Length Type Flags StreamID
超过9字节的部分是Payload数据 最大16兆字节
HTTP/2.0 请求与响应
HTTP/2.0 流与多路复用
一个连接中多个通道(stream流),互不影响
小结
- 引入帧(Frame)的概念,每一帧包含Length+Type+Flags+StreamID+Payload五部分,前四个部分是固定长度为9字节,第五部分Payload的最大长度为214到224-1字节,即16kb到16mb,具体的最大长度由终端自行决定
- 保留了请求和响应的概念,请求头和响应头会被发送方压缩后,分成几个连续的Frame传输,头字段会出现在这些Frame的Payload中,接收方拼合这些Frame后,解压缩即可得到真正的请求头或响应头
- 引入了流(Stream)的概念,一个Stream由双向传输的连续且有序的Frame组成,一个TCP连接可以包含多个Stream(比如100个),一个Stream只用于一次请求和一次响应。Stream之间不会互相影响
- 服务端可以先发响应,客户端拿到响应结果后可以保存,之后就不需要再发对应的请求了
- 头部字段全部改为小写,不允许出现大写。比如:accept:text/html
- 引入了伪头部字段的概念,出现在头部字段前面,必须以冒号靠头。比如:method=GET
服务器推送ServerPush
在第一次请求后,服务器可以主动推送后续文件
后台配置
第一种配置Nginx
location / {
root /usr/share/nginx/html;
index index.html index.htm;
http2_push /style.css;
http2_push /example.png;
}
第二种配置Nginx
location / {
...
http_push_preload on;
}
然后在index.html响应头加
Link:;rel=preload;as=style
这个功能几乎没人用