http2.0新特性详解

参考:http://www.alloyteam.com/2015/03/http2-0-di-qi-miao-ri-chang/

二进制分帧

应用层和传输层之间添加二进制分帧层,将传输的信息分割成更小的信息和帧进行二进制编码。更底层的二进制数据流有助于低延迟。
其中,首部信息封装到headers帧,请求体封装到Data帧中。

首部压缩

由于每次请求和响应时,请求头和响应头总有重复的部分,故在客户端和服务器端使用首部表存储键值对。对于相同的数据不再发送。
若有不同,则在headers帧中发送变化了的数据,有更改的首部帧被添加到首部表中。

一个TCP连接

TCP在长时间连接时传输数据块的效率最高(慢启动slow start)。
不同浏览器内核允许的TCP连接数不同,一个域名下最多6个。故采用域名分区,比如多个CDN,提高并行下载能力。
由于HTTP连接是一个个按顺序请求响应的,故HTTP2.0进一步改善————多路复用。

多路复用

一个HTTP连接上允许多个请求响应,资源并行交错发送。
本质:
http信息拆分为独立的帧,交错发送,在另一端根据首部信息重组。双向数据流乱序发送。(域名分区优化无效)
同时,2.0的请求优先级优化了下载。

服务器端推送

对客户端一个请求发送多个响应。
请求html时,其他资源会预推送。

###附录1:关于http1.x
无状态:不保留上一个HTTP请求的相关信息(即无上下文)。(服务端不知道客户端的状态)
注释:前期网页比较简单时数据关联度低不需要有状态。后期交互增强,数据前后有依赖,故产生了cookie、session等状态存储部件。
keep-alive:TCP长连接,一个TCP不断开,上可串行进行多个HTTP请求
参考:
http://www.alloyteam.com/2016/07/httphttp2-0spdyhttps-reading-this-is-enough/
https://blog.csdn.net/sundacheng1989/article/details/28239711

###附录2:关于缓存
DNS缓存:域名与IP地址的关联缓存,下次访问无需查找。
cache-control Expires:基于时间有效期,不适合随时有更新的页面资源
ETag If-None-Match:基于版本
Last-Modified If-Modified-Since:基于最后一次修改时间