当前位置: 代码迷 >> 综合 >> http2,0
  详细解决方案

http2,0

热度:14   发布时间:2024-01-26 00:59:11.0
  • http1.0的缺点
    1. HTTP/1.0一次只允许在一个TCP连接上发起一个请求,HTTP/1.1使用的流水线技术也只能部分处理请求并发,仍然会存在队列头阻塞问题,因此客户端在需要发起多次请求时,通常会采用建立多连接来减少延迟。
    2. 单向请求,只能由客户端发起。
    3. 请求报文与响应报文首部信息冗余量大。
    4. 数据未压缩,导致数据的传输量大。
  • http2.0
    1. 二进制传输
      HTTP2.0中所有加强性能的核心是二进制传输,在HTTP1.x中,我们是通过文本的方式传输数据。基于文本的方式传输数据存在很多缺陷,文本的表现形式有多样性,因此要做到健壮性考虑的场景必然有很多,但是二进制则不同,只有0和1的组合,因此选择了二进制传输,实现方便且健壮。
      在HTTP2.0中引入了新的编码机制,所有传输的数据都会被分割,并采用二进制格式编码。
    2. 多路复用
      在HTTP1.0中,我们经常会使用到雪碧图、使用多个域名等方式来进行优化,都是因为浏览器限制了同一个域名下的请求数量,当页面需要请求很多资源的时候,队头阻塞(Head of line blocking)会导致在达到最大请求时,资源需要等待其他资源请求完成后才能继续发送。
      HTTP2.0中,有两个概念非常重要:帧(frame)和流(stream)。
      帧是最小的数据单位,每个帧会标识出该帧属于哪个流,流是多个帧组成的数据流。
      所谓多路复用,即在一个TCP连接中存在多个流,即可以同时发送多个请求,对端可以通过帧中的表示知道该帧属于哪个请求。在客户端,这些帧乱序发送,到对端后再根据每个帧首部的流标识符重新组装。通过该技术,可以避免HTTP旧版本的队头阻塞问题,极大提高传输性能。
    3. Header压缩
      在HTTP1.0中,我们使用文本的形式传输header,在header中携带cookie的话,每次都需要重复传输几百到几千的字节,这着实是一笔不小的开销。
      在HTTP2.0中,我们使用了HPACK(HTTP2头部压缩算法)压缩格式对传输的header进行编码,减少了header的大小。并在两端维护了索引表,用于记录出现过的header,后面在传输过程中就可以传输已经记录过的header的键名,对端收到数据后就可以通过键名找到对应的值。
    4. 服务器Push
      在HTTP2.0中,服务端可以在客户端某个请求后,主动推送其他资源。
      可以想象一下,某些资源客户端是一定会请求的,这时就可以采取服务端push的技术,提前给客户端推送必要的资源,就可以相对减少一点延迟时间。在浏览器兼容的情况下也可以使用prefetch。
    5. 更安全
      HTTP2.0使用了tls的拓展ALPN做为协议升级,除此之外,HTTP2.0对tls的安全性做了近一步加强,通过黑名单机制禁用了几百种不再安全的加密算法。

https://segmentfault.com/a/1190000016656529?utm_source=tag-newest

  相关解决方案