网络互联的昨天、今天和明天:HTTP 协议的演化
2020-11-03 本文已影响0人
码农架构
网络互联的昨天、今天和明天:HTTP 协议的演化
image.pngHTTP/0.9
- 1991年
- The One-line Protocol
<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">GET /target.html</pre>
HTTP/1.0
- 1996年
- 返回码
- Header
- 字符集
- 多行请求
- GET, HEAD, POST
HTTP/1.1
- 1999年
- HTTP 的长连接
(上图来自 Evolution of HTTP — HTTP/0.9, HTTP/1.0, HTTP/1.1, Keep-Alive, Upgrade, and HTTPS)
- 分块传输编码, 服务端可以在还不知道最终将传递多少数据的时候,就可以一块一块将数据传回来
- Trailer, 这个额外的信息可以是用来校验正确性的 checksum,可以是数字签名,或者传输完成的状态等等。
- 全面的方法
- 全面的返回码
- 指定客户端缓存策略
- 对 content negotiation 的支持(即通过客户端请求的以 Accept 开头的头部来告知服务端它能接受的内容类型)
HTTP/2
- 设计了一种机制,允许客户端来选择使用的 HTTP 版本,这个机制被命名为 ALPN;
- HTTP 头的压缩,在 HTTP/2 以前,HTTP 正文支持多种方式的压缩,但是 HTTP 头部却不能;
- 多路复用,允许客户端同时在一个连接中同时传输多组请求响应的方法;
- 服务端的 push 机制,比方说客户端去获取一个网页的时候,下载网页,分析网页内容,得知还需要一个 js 文件和一个 css 文件,于是再分别下载,而服务端的 push 机制可以提前就把这些资源推送到客户端,而不需要客户端来索取,从而节约网页加载总时间。
在 HTTP/2 之后,我们展望未来,HTTP/3 已经箭在弦上。如同前面的版本更新一样,依旧围绕传输效率这个协议核心来做进一步改进,其承载协议将从 TCP 转移到基于 UDP 的 QUIC 上面来。
扩展阅读
- 【基础】如果你对 HTTP 还不熟悉的话,推荐你阅读一篇系统性介绍 HTTP 的教程,比如 MDN 的这篇教程
- 【基础】The OSI model explained: How to understand (and remember) the 7 layer network model:如果你对网络的 OSI 7 层模型还不清楚的话,建议阅读。如果你想知道那些鼎鼎大名的网络协议在这个模型中的哪个位置,那么请从 List of network protocols (OSI model) 里面找。基于聚焦主题的关系,我们在这个专栏中不会详细介绍呈现层(Presentation Layer)之下的网络协议。
- HTTP 1.0, 1.1, 2.0:它们是 RFC 文档,看起来似乎枯燥乏味,通常我们不需要去仔细阅读它们,但是当我们想知道对协议的理解是否正确,它们是我们最终的参考依据。
- Key differences between HTTP 1.0 and HTTP 1.1:文中总结了从 HTTP 1.0 到 1.1 的 9 大改进;而 HTTP/2 Complete Tutorial 是一篇比较系统的 HTTP/2 的介绍。