HTTP协议的不足(HTTP,HTTPS)
同一时间,一个连接只能对应一个请求
只允许客户端主动发起请求
同一个会话多次请求中,头信息会重复传输
SPDY
SPDY基于TCP的应用层协议,强制要求使用SSL/TLS
image.jpegHTTP/2
- 复用流:SPDY允许在一个连接上无限制并发流。因为请求在一个通道上,TCP效率更高:更少的网络连接,发出更少更密集的数据包。
- 请求优先级:虽然无限的并发流解决了序列化的问题,但他们引入了另一个问题:如果带宽通道受限制, 客户端可能会因防止堵塞通道而阻止请求。为了克服这个问题,SPDY实行请求优先级:客户端从服务器端请求它希望的项目数量,并为每个请求分配一个优先级。这可以防止在网络通道被非关键资源堵塞时,高优先级的请求被挂起。
- HTTP报头压缩:SPDY压缩请求和响应HTTP报头,从而减少传输的数据包数量和字节数。
HTTP2特性-二进制格式
- HTTP报头压缩:SPDY压缩请求和响应HTTP报头,从而减少传输的数据包数量和字节数。HTTP/2采用二进制格式传输数据,而非HTTP/1.1的文本格式
- 二进制格式在协议的解析和优化扩展上带来更多的优势和可能
- 数据流:已建立的连接内的双向字节流,可以承载一条或多条消息
所有通信都在一个TCP连接上完成,此连接可以承载任意数量的双向数据流
- 数据流:已建立的连接内的双向字节流,可以承载一条或多条消息消息:与逻辑HTTP请求或响应消息对应,由一系列帧组成
- 帧:HTTP/2通信的最小单位,每个帧都包含帧头(会标识出当前帧所属的数据流)
来自不同数据流的帧可以交错发送,然后再根据每个帧头的数据流标识符重新组装
HTTP2特性-多路复用
- HTTP/2 标准允许每个数据流都有一个关联的权重和依赖关系
- 可以向每个数据流分配一个介于1至256之间的整数
- 每个数据流与其他数据流之间可以存在显式依赖关系
- 客户端可以构建和传递“优先级树”,表明它倾向于如何接收响应
- 服务器可以使用此信息通过控制CPU、内存和其他资源的分配设定数据流处理的优先级
- 在资源数据可用之后,确保将高优先级响应以最优方式传输至客户端
- image sprites 将多张小图合并为一张大图
HTTP2特性-优先级
-
HTTP/2 标准允许每个数据流都有一个关联的权重和依赖关系
-
可以向每个数据流分配一个介于1至256之间的整数
-
每个数据流与其他数据流之间可以存在显式依赖关系
-
客户端可以构建和传递“优先级树”,表明它倾向于如何接收响应
-
服务器可以使用此信息通过控制CPU、内存和其他资源的分配设定数据流处理的优先级
在资源数据可用之后,确保将高优先级响应以最优方式传输至客户端
- 应尽可能先给父数据流分配资源
- 同级数据流(共享相同父项)应按其权重比例分配资源
HTTP2特性-头部压缩
- HTTP/2使用HPACK压缩请求头和响应头
- 可以极大减少头部开销,进而提高性能
- 早期版本的HTTP/2和SPDY使用 zlib压缩
- 可以将所传输头数据的大小减小85%~88%
- 但在2012年夏天,被攻击导致会话劫持后被更安全的HPACK取代
HTTP2特性-服务器推送
- 服务器可以对一个客户端请求发送多个响应
- 除了对最初请求的响应外,服务器还可以向客户端推送额外资源,而无需客户端额外明确地请求
HTTP2问题-队头阻塞
HTTP2问题-握手延迟
网友评论