HTTP2.0 做了哪些改进

453 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第22天,点击查看活动详情

核心描述

  • HTTP2.0 协议
    • 是基于 Google 的 SPDY 协议的加强版,基于 TCP 协议
    • 优点:
      • 二进制格式的协议,增加了数据传输的效率
      • 多路复用,可以再一个 TCP 链接中并发请求多个 HTTP 请求,移除了 HTTP 1.1 中的串行请求
      • Header 头压缩,如果你同时发出多个请求,他们的头是一样的或是相似的,那么,协议会帮你消除重复部分,即 HPACK 算法
      • 服务端推送,允许服务端在客户端放 cache,也就是说,你没有请求的东西,服务端可以先送给你放到你本地缓存中。比如,你请求 X,服务端知道 X 依赖于 Y,虽然你没有请求 Y,但服务端可以把 Y 跟着 X 的请求一起返回给客户端
    • 缺点:
      • TCP 以及 TCP+TLS 建立连接的延时
      • TCP 的队头阻塞(Head-of-Line blocking)并没有彻底解决 TCP 为了保证可靠传输,如果有丢包,请求会等待重传,阻塞后面的数据
      • 多路复用导致服务器压力上升,请求的平均数量与往常相同,但实际会有许多请求短暂爆发,导致瞬时 QPS 暴增
      • 多路复用容易 Timeout,大批量的请求同时发送,由于 HTTP2.0 连接存在多个并行的流,而网络带宽和服务器资源优先,每个流的资源会被稀释,所以都有可能 Timeout

知识拓展

  • HTTP 协议:超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。

  • 网络模型:

    • 七层 OSI 模型
      • 应用层:网络服务与最终用户的一个接口。如:HTTP 、HTTPS、FTP、TFTP、SMTP、DNS、POP3、DHCP 等
      • 表示层:数据的表示、安全、压缩。如:JPEG、ASCII、加密格式等
      • 会话层:建立、管理、终止会话。对应主机进程,指本地主机与远程主机正在进行会话
      • 传输层:定义传输数据的协议端口号,以及流控和差错校验,如:TCP、UDP
      • 网络层:进行逻辑地址寻址,实现不同网络之间的路径选择。如:ICMP、IGMP、IP(IPV4、IPV6)
      • 数据链路层:建立逻辑链接、进行硬件地址寻址、差错校验等功能
      • 物理层:建立、维护、断开物理链接
    • TCP/IP 四层模型
      • 应用层(应用层、表示层、会话层)
      • 传输层
      • 网络层
      • 数据链路层(数据链路层、物理层)
  • TCP 协议:传输控制协议(TCP,Transmission Control Protocol),是一种面向连接的、可靠的、基于字节流的传输层通信协议

    • 优点:可靠、稳定;
    • 缺点:慢、效率低,占用系统资源高,容易被攻击
    • 应用:HTTP、HTTPS、FTP 等
  • UDP 协议:用户数据报协议(UDP,User Datagram Protocol),是一种无连接的传输协议。

    • 优点:快、稍微安全
    • 缺点:不可靠,不稳定,没有类似TCP三次握手的机制
    • 应用:IM即时通讯等场景
  • SPDY 协议:

    • 是 Google 开发的基于 TCP 的会话层协议
    • 用以最小化网络延迟,提升网络速度,优化用户的网络使用体验。
    • SPDY 并不是一种用于替代 HTTP 的协议,而是对 HTTP 协议的增强。新协议的功能包括数据流的多路复用、请求优先级以及 HTTP 报头压缩
    • HTTP 2.0 出现后,SPDY 被废弃,因为 HTTP 2.0 是 SPDY 协议的加强版
  • QUIC 协议:

    • QUIC(Quick UDP Internet Connection)是谷歌制定的一种基于UDP的低时延的互联网传输层协议
    • QUIC 可以看做是一个在 UDP 之上的伪 TCP + TLS + HTTP/2 的多路复用的协议
    • HTTP 3.0 可以看做是 HTTP 2.0 + QUIC 的增强版
  • Http 协议的版本及其简要特点

    • Http 0.9
      • 1991年发布
      • 只允许客户端发送GET这一种请求,且不支持请求头。
      • 由于没有协议头,造成了HTTP/0.9协议只支持一种内容,即纯文本。
      • 不过网页仍然支持用HTML语言格式化,同时无法插入图片。
    • Http 1.0
      • 1996年发布
      • 请求与响应支持头部
      • 响应对象以一个响应状态码开始
      • 响应对象不只限于超文本
      • 开始支持客户端通过 POST 方法向 web 服务器提交数据,支持 GET、HEAD、POST 方法
      • 支持长连接(但默认还是使用短连接)、缓存机制以及身份认证
    • HTTP 1.1
      • 1997年发布 RFC 2068,1999发布 RFC 2616 , 2014 年发布 RFC 7230-7235
      • HTTP 长链接,设置 keep-alive
      • 支持 pipeline 网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。(注:非幂等的POST 方法或是有依赖的请求是不能被pipeline化的)
      • 服务端 Push 式的 HTTP 持久链接
      • Cache-Control 请求头
      • 虚拟主机 HOST 请求头
      • CORS 跨域机制的 OPTIONS 请求方法
      • 其他请求头:Language, Encoding, Type 等等
      • 错误通知的管理,新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除
    • HTTP 2.0
      • 2015年发布
      • 二进制格式的协议
      • 多路复用
      • Header 头压缩
      • 服务端推送
    • HTTP 3.0
      • 2018年发布,2019年被现代浏览器支持
      • 减少了 TCP 三次握手时间及 TLS 握手时间
      • 多路复用丢包时的线头阻塞问题
      • 优化重传策略
      • 流量控制
      • 连接迁移

参考资料

浏览知识共享许可协议

本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。