1986 年,美国国家科学基金会(National Science Foundation,NSF)建立了大学之间互联的骨干网络 NSFNET,这是互联网历史上重要的一步,NSFNET 成为新的骨干,1990 年 ARPANET 退役 。
在 1990 年,蒂姆·伯纳斯-李(下文我就称李老) 创建了运行万维网所需的所有工具:超文本传输协议(HTTP)、超文本标记语言(html)、第一个网页浏览器、第一个网页服务器和第一个网站 。
文章插图
至此,互联网开启了快速发展之路,HTTP 也开始了它的伟大征途 。
还有很多有趣的历史,比如第一次浏览器大战等等,之后有机会再谈,今天我们的主角是 HTTP 。
接下来我们就看看 HTTP 各大版本的演进,来看看它是如何成长到今天这个样子的 。
HTTP / 0.9 时代在 1989 年,李老发表了一篇论文,文中提出了三项现在看来很平常的三个概念 。
- URI,统一资源标识符,作为互联网上的唯一标识 。
- HTML,超文本标记语言,描述超文本 。
- HTTP,超文本传输协议,传输超文本 。
那时候是互联网初期,计算机的处理能力包括网速等等都很弱,所以 HTTP 也逃脱不了那个时代的约束,因此设计的非常简单,而且也是纯文本格式 。
李老当时的想法是文档存在服务器里面,我们只需要从服务器获取文档,因此只有 “GET”,也不需要啥请求头,并且拿完了就结束了,因此请求响应之后连接就断了 。
这就是为什么 HTTP 设计为文本协议,并且一开始只有“GET”、响应之后连接就断了的原因了 。
在我们现在看来这协议太简陋了,但是在当时这是互联网发展的一大步!一个东西从无到有是最困难的 。
这时候的 HTTP 还没有版本号的,之所以称之为 HTTP / 0.9 是后人加上去了,为了区别之后的版本 。
HTTP 1.0 时代人们的需求是无止尽的,随着图像和音频的发展,浏览器也在不断的进步予以支持 。
在 1995 年又开发出了 Apache,简化了 HTTP 服务器的搭建,越来越多的人用上了互联网,这也促进了 HTTP 协议的修改 。
需求促使添加各种特性来满足用户的需求,经过了一系列的草案 HTTP/1.0 于 1996 年正式发布 。
Dave Raggett 在1995年领导了 HTTP 工作组,他希望通过扩展操作、扩展协商、更丰富的元信息以及与安全协议相关的安全协议来扩展协议,这种安全协议通过添加额外的方法和头字段来提高效率 。
文章插图
所以在 HTTP/1.0 版本主要增加以下几点:
- 增加了 HEAD、POST 等新方法 。
- 增加了响应状态码 。
- 引入了头部,即请求头和响应头 。
- 在请求中加入了 HTTP 版本号 。
- 引入了 Content-Type,使得传输的数据不再限于文本 。
引入的响应状态码让请求方可以得知服务端的情况,可以区分请求出错的原因,不会一头雾水 。
引入了头部,使得请求和响应更加的灵活,把控制数据和业务实体进行了拆分,也是一种解耦 。
新增了版本号表明这是一种工程化的象征,说明走上了正途,毕竟没版本号无法管理 。
引入了 Content-Type,支持传输不同类型的数据,丰富了协议的载体,充实了用户的眼球 。
但是那时候 HTTP/1.0 还不是标准,没有实际的约束力,各方势力不吃这一套,大白话就是你算老几 。
HTTP 1.1 时代HTTP/1.1 版本在 1997 的 RFC 2068 中首次被记录,从 1995 年至 1999 年间的第一次浏览器大战,极大的推动了 Web 的发展 。
随着发展 HTTP/1.0 演进成了 HTTP/1.1,并且在 1999 年废弃了之前的 RFC 2068,发布了 RFC 2616 。
从版本号可以得知这是一个小版本的更新,更新主要是因为 HTTP/1.0 很大的性能问题,就是每请求一个资源都得新建一个 TCP 连接,而且只能串行请求 。
所以在 HTTP/1.1 版本主要增加以下几点:
- 新增了连接管理即 keepalive,允许持久连接 。
- 支持 pipeline,无需等待前面的请求响应,即可发送第二次请求 。
- 允许响应数据分块(chunked),即响应的时候不标明Content-Length,客户端就无法断开连接,直到收到服务端的 EOF,利于传输大文件 。
推荐阅读
- Nginx系列:https配置
- 网络编程之 Https 详细分析,超详细知识点
- 全栈工程师眼中的HTTP
- 一文学懂递归和动态规划
- python 如何使用HttpRunner做接口自动化测试
- 借助 HTTP 通过 SSH 绕过 Linux 防火墙
- 一文读懂阿里云之VPC概念及实战
- 通常都要知道的TCP、HTTP知识点
- 一文入魂!聊透分布式系统一致性
- HttpClient三个超时时间详解