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。但存在以下差异(按顺序):
HTTP headers 使用 compressed binary representation(压缩的二进制表示)而不是 textual data(文本型数据),这样 headers 需要的空间就会少很多
每个 server domain 使用 single TCP/IP connection(单个 TCP/IP 连接,通常是 encrypted 加密的),而不是 2 到 8 个 TCP/IP connections
每个 TCP/IP connection 使用一个或多个 bidirectional streams(双向流),其中 HTTP requests 和 responses 被分解成 small packets 进行传输,这几乎可以解决队头阻塞问题
添加 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