客户端开发基础知识——HTTP/1.x 和 HTTP/2

458 阅读1分钟

一、HTTP/1.x

  • 基于TCP连接

  • 只能传送文本内容

  • 同一连接(Keep-Alive的情况)同时只能处理一个请求,请求的响应回来后才能开始发送下一个请求

    • Keep-Alive的每个请求都会新建一个TCP连接

    • 如果支持客户端和服务器(以及中间结点)都支持HTTP流水线HTTP Pipelining),客户端可以同时发出多个请求,但服务端在传送完请求1的响应后才能开始传送请求2的响应

为提高传输效率,浏览器等应用层软件会选择与同一服务器同时建立多个TCP连接(一般上限是6个):

  • 连接限制的对象是域名而非IP,可用域名分片(同一IP绑定多个域名)来绕过连接数限制
  • Apple平台的NSURLSession可配置HTTPMaximumConnectionsPerHost来指定上限(iOS默认为4mac默认为6

二、HTTP/2

  • 基于TCP连接
  • 传送二进制数据(包括HEADERDATA
  • 同一个连接可以用来同时发送多个请求和响应
    • 可指定各个请求之间的依赖关系和各自的权重
      • 依赖关系用来顺序化,依赖方会等被依赖方响应回来之后再开始请求
      • 权重用来告诉系统分配多少资源给该请求
    • 不再需要建立多条TCP连接
  • Header支持压缩(HPACK算法
  • 因为是多路请求复用同一连接,协议支持分别按请求、按方向做流量控制
  • 支持服务端主动推送客户端未请求的数据

参考资料

最后,欢迎大家关注我的微信公众号,有空多多交流