计算机网络 5分钟掌握HTTP(1.0,1.1,2.0,3.0)

48 阅读3分钟

基础知识

HTTP 1.0

HTTP1.0默认使用 Connection:close,浏览器每次请求都需要与服务器建立一个 TCP 连接,服务器处理完成后立即断开 TCP 连接(无连接),服务器不跟踪每个客户端也不记录过去的请求(无状态)。

HTTP 1.1

特点

  1. 默认使用 Connection:keep-alive(长连接),避免了连接建立和释放的开销
  2. 通过 Content-Length 字段来判断当前请求的数据是否已经全部接受。
  3. 只要任意一端没有明确提出断开连接,则保存TCP连接状态。
  4. 持久连接使得多数请求以管线化方式(pipelining)成为可能。可以同时并行发送多个请求,而不需要一个接一个的等待响应了。

待改善

  1. 由于队头阻塞,导致宽带无法被充分利用
  2. 无状态特性,带来巨大的Http头部
  3. 明文传输,不安全(加密通信 TLS/SSL
  4. 不支持服务器推送消息。

HTTP 2.0

SPDY(读作“SPeeDY”)被当做HTTP2.0的基础,是Google开发的基于TCP的会话层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验。SPDY并不是一种用于替代HTTP的协议,而是对HTTP协议的增强。新协议的功能包括数据流的多路复用、请求优先级以及HTTP报头压缩。 image.png

特点

  1. 二进制传输
    http2.0将请求和响应数据分割为更小的帧,并且它们采用二进制编码(http1.0基于文本格式)。多个帧之间可以乱序发送,根据帧首部的流表示可以重新组装。
  2. Header压缩
    Http2.0开发了专门的“HPACK”算法,大大压缩了Header信息。
  3. 多路复用
    多路复用技术可以只通过一个TCP链接就可以传输所有的请求数据。
  4. 服务端推送
    HTTP2.0在一定程度上改不了传统的“请求-应答”工作模式,服务器不再完全被动地响应请求,也可以新建“流”主动向客户端发送消息。(例如,浏览器在刚请求html的时候就提前把可能会用到的JS,CSS文件发送给客户端,减少等待延迟,这被称为“服务端推送Server Push”)

待改善

  1. TCP以及TCP+TLS建立连接的延迟(握手延迟)
  2. TCP的队头阻塞没有彻底解决(http2.0中,多个请求是跑在一个TCP管道中的,一旦丢包,TCP就要等待重传(丢失的包等待重新传输确认),从而阻塞该TCP连接中的所有请求)

HTTP 3.0

Google在推行SPDY的时候意识到了上述http2.0一系列问题,于是又产生了基于UDP协议的“QUIC”协议,让HTTP跑在QUIC上而不是TCP上。从而产生了HTTP3.0版本,它解决了“队头阻塞”的问题

特点

  1. 实现了类似TCP的流量控制,传输可靠性的功能
  2. 实现了快速握手功能(QUIC基于UDP,UDP是面向无连接的,不需要握手和挥手,比TCP快)
  3. 集成了TLS加密功能
  4. 多路复用,彻底解决TCP中队头阻塞的问题(单个“流”是有序的,可能会因为丢包而阻塞,但是其他流不会受到影响)