HTTP的前世今生详解

HTTP (Hypertext transfer protocol) 翻译成中文是超文本传输协议,是互联网上重要的一个协议,由欧洲核子研究委员会 CERN 的英国工程师 Tim Berners-Lee v 发明的,同时,他也是 WWW 的发明人,最初的主要是用于传递通过 HTML 封装过的数据 。在 1991 年发布了 HTTP 0.9 版,在 1996 年发布 1.0 版,1997 年是 1.1 版,1.1 版也是到今天为止传输最广泛的版本(初始 RFC 2068 在 1997 年发布,然后在 1999 年被 RFC 2616 取代,再在 2014 年被 RFC 7230 /7231/7232/7233/7234/7235 取代),2015 年发布了 2.0 版,其极大的优化了 HTTP/1.1 的性能和安全性,而 2018 年发布的 3.0 版,继续优化 HTTP/2,激进地使用 UDP 取代 TCP 协议,目前,HTTP/3 在 2019 年 9 月 26 日 被 Chrome,Firefox,和 Cloudflare 支持,所以我想写下这篇文章,简单地说一下 HTTP 的前世今生,让大家学到一些知识,并希望可以在推动一下 HTTP 标准协议的发展 。
HTTP 0.9 / 1.00.9 和 1.0 这两个版本,就是最传统的 request – response 的模式了,HTTP 0.9 版本的协议简单到极点,请求时,不支持请求头,只支持 GET 方法,没了 。HTTP 1.0 扩展了 0.9 版,其中主要增加了几个变化:

  • 在请求中加入了 HTTP 版本号,如:GET /coolshell/index.html HTTP/1.0
  • HTTP 开始有 header 了,不管是 request 还是 response 都有 header 了 。
  • 增加了 HTTP Status Code 标识相关的状态码 。
  • 还有 Content-Type 可以传输其它的文件了 。
我们可以看到,HTTP 1.0 开始让这个协议变得很文明了,一种工程文明 。因为:
  • 一个协议有没有版本管理,是一个工程化的象征 。
  • header 是协议可以说是把元数据和业务数据解耦,也可以说是控制逻辑和业务逻辑的分离 。
  • Status Code 的出现可以让请求双方以及第三方的监控或管理程序有了统一的认识 。最关键是还是控制错误和业务错误的分离 。
(注:国内很多公司 HTTP 无论对错只返回 200,这种把 HTTP Status Code 全部抹掉完全是一种工程界的倒退)
但是,HTTP1.0 性能上有一个很大的问题,那就是每请求一个资源都要新建一个 TCP 链接,而且是串行请求,所以,就算网络变快了,打开网页的速度也还是很慢 。所以,HTTP 1.0 应该是一个必需要淘汰的协议了 。
HTTP/1.1HTTP/1.1 主要解决了 HTTP 1.0 的网络性能的问题,以及增加了一些新的东西: