计算机网络HTTP:HTTP/1.x 和 HTTP/2

  • WEB性能的终极目标
    • 减少到客户端的延迟,让用户能够尽可能快的打开前端网页并进行相关交互。
    • 尽可能发送少的数据给服务器,从服务器下载尽可能少的数据,尽可能减少往返(Round Trips)。
      image
  • HTTP/1.x 的缺陷
    • 线程阻塞,在同一时间,同一域名的请求有一定数量限制,超过限制数目的请求就会被阻塞。
    • HTTP/1.0
      • 缺陷:浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个用户,也不记录过去的请求。
      • 解决方法:添加头信息 --- 非标准的Connection字段Connection:keep-alive
    • HTTP/1.1
      • 改进
        • 持久连接:引入了持久连接,即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection:keep-alive(对于同一个域名,大多数浏览器允许同时建立6个持久连接)
        • 管道机制:即在同一个TCP连接里面,客户端可以同时发送多个请求
        • 分块传输编码:即服务端每产生一块数据,就发送一块,采用流模式代替缓存模式
        • 新增请求方式:PUT,DELETE,OPTIONS,TRACE,CONNECT
      • 缺点
        • 虽然允许复用TCP连接,但是同一个TCP连接里面,所有的数据通信是按次序进行的。服务器只有处理完一个请求,才会接着处理下一个请求。如果前面的处理特别慢,后面就会有很多请求排队等着。这将导致“队头堵塞”。
      • 避免方式:一是减少请求数,二是同时多开持久连接。
  • HTTP/2.0
    • 特点
      • 采用二进制格式而非文本格式:HTTP/1.1的头信息是文本,数据体可以是文本也可以是二进制。HTTP/2.0头信息和数据体都是二进制。
      • 完全多路复用:HTTP/2.0复用TCP连接,在一个连接里,客户端和服务端都可以同时发送多个请求或回应,而且不用按照顺序一一对应,这样就避免了“队头堵塞”。
      • 报头压缩
        • HTTP协议无状态,导致每次请求都必须附上所以信息。所以,请求的很多头字段都是重复的,比如cookie,一样的内容每次都必须附带。
        • 对于相同的头部,不必再通过请求发送,只需发送一次。
        • 头信息使用gzip或compress压缩后再发送。
        • 客户端和服务端同时维护一张头信息表,所有字段都会存入这个表,产生一个索引号,之后就不发送同一字段了,只需发送索引号。
      • 服务器推送
        • 允许服务器未经请求,主动向客户端发送资源
        • 通过推送那些客户端将会需要的内容到客户端的缓存中,避免往返的延迟。

猜你喜欢

转载自www.cnblogs.com/xiaobaizzz/p/12301986.html
今日推荐