💡HTTP 发展简史

HTTP 协议诞生于 30 多年前,设计之初是用来传输“纯文本”数据的。

因为 HTTP 的形式非常灵活,再搭配 URI、HTML 等技术便能把互联网上的资源都联系起来,从而构成了一个复杂的超文本系统,可以让人们自由地获取各类信息,所以相关技术都得到了迅猛的发展。

年份
技术
说明

20 世纪 60 年代

ARPA 网

有四个分布在各地的节点 被认为是如今互联网的始祖

20 世纪 70 年代

TCP/IP 协议

良好的分层结构和稳定的性能 并在 80 年代中期进入了 UNIX 系统内核

1989 年

URI HTML HTTP

Tim Berners-Lee 将此系统称为 World Wide Web(万维网)

20 世纪 90 年代初

HTTP/0.9

纯文本(时代性) 只支持 Get(最初设想文档均只读,且响应完后立即关闭连接)

Mosaic Apache JPEG MP3

第一个可以图文混排的浏览器 服务器软件 图像格式 音乐格式

1996 年

HTTP/1.0

记录了已有实践和模式的参考文档,RFC 1945 1. 增加了 HEAD、POST 等新方法 2. 增加了响应状态码,标记可能的错误原因 3. 引入了协议版本号概念 4. 引入了 HTTP Header,让 HTTP 处理请求和响应更灵活 5. 传输的数据不再仅限于文本

浏览器大战

IE v.s. Netscape Navigator

1997 年

HTTP/1.1 ✔️

HTTP over TCP/IP,正式标准,RFC 2616 在 1999, 2014, 2022 年有过更新 1. 增加了 PUT、DELETE 等方法 2. 增加了 cache 管理和控制 3. 明确了连接管理,允许持久连接,keep-alive 机制 4. 允许响应数据分块,利于传输大文件 5. 强制要求 Host 头,让互联网主机托管成为可能 6. 文档拆成了六份,RFC 7230-7235

1989~2004

Web 1.0

静态网站,绝大多数用户只是充当内容的消费者

1999 年创造 2004~至今

Web 2.0

交互式网站,Ajax+JS+DOM network as platform,网络即平台

互联网迅猛发展

各种优化手段,比如切图、文件合并

HTTPS

HTTP over SSL/TLS over TCP/IP SSL/TLS 是一个负责加密通信的安全协议 SSL,Secure Socket Layer TLS,Transport Layer Security 当 SSL 发展到 3.0 时被标准化,改名为 TLS

2009~2015

SPDY 协议

非官方,HTTP binary protocol 目标是 reduced latency(减少延迟) 1. 手段有 compression(压缩), multiplexing(多路复用), prioritization(优先级排序) 2. 服务器可以 push 3. 需要使用 SSL/TLS,但也支持普通的 TCP

2015 年发布 2020 年带 TLS 1.3

HTTP/2

derived from SPDY,二进制协议,RFC 7540 可协商使用的协议,如 HTTP/1.1, HTTP/2 或非 HTTP 协议 增强了安全性,“事实上”要求加密通信 通过以下手段来减少延迟 1. headers 是压缩的二进制格式 2. 新增 server push 功能 3. requests 的 prioritization(优先级排序) 4. multiplexing(多路复用) 每个 server domain 使用单个 TCP/IP connection 每个 TCP/IP connection 使用一个或多个双向 streams 同时废弃了 HTTP/1.1 里的管道

2012 年诞生 2015 年提交规范 2018 年->HTTP/3 2021 年标准化

QUIC 协议

transport layer network protocol 几乎等同于 TCP connection,但 latency 大大降低了 旨在解决 HTTP/2 的队头阻塞 是基于 UDP 的 multiplexed transport protocol

2018 年 2020 年实现 2022 年标准化

HTTP/3 ✔️

HTTP over TLS over QUIC/UDP over IP 2020 年,the first drafts,有浏览器已支持 2022年6月6日,标准化为 RFC 9114

1999 年提出

Web 3.0

Semantic Web,语义 Web,由 Berners-Lee 创造 内容网络的含义可以由机器处理

2014 年创造 2021 年流行

Web 3

基于区块链的去中心化在线生态系统 去中心化、区块链技术、基于代币的经济学

从 HTTP/1.1 -> HTTP/2 -> HTTP/3:

  • 相同点:HTTP semantics(request methods, status codes, message fields)、IP 层

  • 不同点:从 HTTP semantics(语义)到 underlying transports(底层传输)的映射

HTTP 是一个 application layer protocol(应用层协议),设计于 Internet protocol suite(协议族)的框架之内。它的定义假定了一个 underlying(底层)和 reliable(可靠)的 transport layer protocol(传输层协议),因此普遍采用的是 TCP(Transmission Control Protocol,传输控制协议)。然而,HTTP 也可以使用 unreliable protocols,比如 UDP(User Datagram Protocol,用户数据报协议)。

HTTP 是一种 stateless 的 application-level protocol,它需要 reliable network transport connection 来在 client 和 server 之间 exchange data。

HTTP/1.0

每个 resource request 都会建立 separate connection(单独的连接),即便是去 same server。

HTTP/1.1

TCP connection 可以 reused 来支持 multiple resource requests,所以其通信有 less latency(更少的延迟)因为 establish TCP connections 会带来相当大的开销,特别是在 high traffic(高流量)的条件下。

keep-alive 机制(一个 connection 可以被多个 request/response 复用)的好处是,可以明显地 reduce request latency(减少请求延迟)。另一个积极的副作用是,一般来说,connection 会随着时间的推移而变 faster(由于 TCP 的 slow-start 机制)。

在这个版本里添加的 HTTP pipelining 后来被禁用了,一是不安全,二是要采用 HTTP/2 了

HTTP/2

HTTP/2 是对 HTTP/1.1 的 revision(修订),以保持相同的 protocol methods 和 client–server model。但存在以下差异(按顺序):

  1. HTTP headers 使用 compressed binary representation(压缩的二进制表示)而不是 textual data(文本型数据),这样 headers 需要的空间就会少很多

  2. 每个 server domain 使用 single TCP/IP connection(单个 TCP/IP 连接,通常是 encrypted 加密的),而不是 2 到 8 个 TCP/IP connections

  3. 每个 TCP/IP connection 使用一个或多个 bidirectional streams(双向流),其中 HTTP requests 和 responses 被分解成 small packets 进行传输,这几乎可以解决队头阻塞问题

  4. 添加 push 功能,以允许 server application 在新数据可用时向 clients 发送数据,而无需 clients 通过 polling methods(轮询方法)定期向 server 请求新数据

因此,HTTP/2 communications(通信)的 latency 要少得多,而且在大多数情况下,甚至比 HTTP/1.1 communications 更快。

HTTP/3

HTTP/3 是对 HTTP/2 的 revision(修订),目的是使用“QUIC 和 UDP transport protocols”代替 TCP connections,同时略微提高 communications 的 average speed,并避免偶尔(非常少见)的 TCP/IP connection congestion(连接阻塞)问题——它会暂时 block 或 slow down 其所有 streams 的 data flow,是另一种形式的 head of line blocking(队头阻塞)。

Last updated