HTTP 前世今生
HTTP 协议在我们身边随处可见,只要上网就离不开它。不论是用浏览器还是 App,不论是看新闻、短视频还是听音乐、玩游戏,后面总会有 HTTP 在默默为你服务。
Http 协议是怎么来的?最开始是什么样子?又是如何一步步发展到今天,几乎统治了整个互联网世界
一起走向 HTTP
的世界,看历史长河中他是如何应运而生,如何适应当今的互联网,它又有什么局限性。
史前时期
20 世纪 60 年代,美国国防部高等研究计划署(ARPA)建立了 ARPA 网,它有四个分布在各地的节点,被认为是如今互联网的 “始祖”。
在 70 年代,基于对 ARPA
网的实践和思考,研究人员发明出了著名的 TCP/IP
协议。由于具有良好的分层结构和稳定的性能,TCP/IP
协议迅速战胜其他竞争对手流行起来,并在 80 年代中期进入了 UNIX
系统内核,促使更多的计算机接入了互联网。
创世纪
1989 年,任职于欧洲核子研究中心(CERN)的蒂姆·伯纳斯 - 李(Tim Berners-Lee)发表了一篇论文,提出了在互联网上构建超链接文档系统的构想。这篇论文中他确立了三项关键技术。
URI
: 统一资源标识符,作为互联网资源的唯有身份。HTML
: 超文本标记语言,描述超文本文档。HTTP
:超文本传输协议,传输超文本数据。
基于它们,就可以把超文本系统完美地运行在互联网上,让各地的人们能够自由地共享信息,蒂姆把这个系统称为“万维网”(World Wide Web),也就是我们现在所熟知的 Web。
所以在这一年,我们的英雄“HTTP”诞生了,从此开始了它伟大的征途。
HTTP / 0.9
20 世纪 90 年代初期的互联网世界非常简陋,计算机处理能力低,存储容量小,网速很慢,还是一片“信息荒漠”。
这一时期的 HTTP
被定义为 0.9 版,结构简单,便于服务器与客户端处理,它也采用了纯文本格式。蒂姆·伯纳斯 - 李最初设想的系统里的文档都是只读的,所以只允许用“GET”动作从服务器上获取 HTML 文档,并且在响应请求之后立即关闭连接,功能非常有限。
HTTP / 1.0
1993 年,NCSA
(美国国家超级计算应用中心)开发出了 Mosaic
,是第一个可以图文混排的浏览器,随后又在 1995
年开发出了服务器软件 Apache,简化了 HTTP
服务器的搭建工作。
同期,计算机多媒体技术也有了新的进展:1992 年发明了 JPEG
图像格式,1995 年发明了 MP3
音乐格式。
HTTP/1.0 版本在 1996 年正式发布。它在多方面增强了 0.9 版,形式上已经和我们现在的 HTTP 差别不大了。
- 增加了
HEAD
POST
等方法。 - 增加了响应状态码,标识可能的错误信息。
- 传输的数据不再仅限于文本。
- 引入了
HTTP Header
(头部)的概念。 - 映入了协议版本号概念。
但 HTTP/1.0 并不是一个“标准”,只是记录已有实践和模式的一份参考文档,不具有实际的约束力,相当于一个“备忘录”。
HTTP / 1.1
1995 年,网景的 Netscape Navigator 和微软的 Internet Explorer 开始了著名的“浏览器大战”,都希望在互联网上占据主导地位。
最终微软的 IE 取得了决定性的胜利,而网景则“败走麦城”。
浏览器大战”的是非成败我们放在一边暂且不管,不可否认的是,它再一次极大地推动了 Web 的发展,HTTP/1.0 也在这个过程中经受了实践检验。于是在“浏览器大战”结束之后的 1999 年,HTTP/1.1
发布了 RFC 文档,编号为 2616,正式确立了延续十余年的传奇。
HTTP/1.1 是对 HTTP/1.0 的小幅度修正。但一个重要的区别是:它是一个“正式的标准”,而不是一份可有可无的“参考文档”。这意味着今后互联网上所有的浏览器、服务器、网关、代理等等,只要用到 HTTP 协议,就必须严格遵守这个标准,相当于是互联网世界的一个“立法”。
实际上并不是 “小幅修正” 这么简单,有很多实质上的进步,比起 0.9/1.0 少了“学术气”,更加“接地气”,同时表述也更加严谨。HTTP/1.1 主要的变更点有:
- 增加了
PUT
DELETE
等方法。 - 明确了连接管理,支持持久连接。
- 强制要求
Host
头,王互联网主机托管称为可能。 - 增加了缓存管理和控制。
- 允许响应数据分块传输 (
chunked
) ,利于传输大文件。
HTTP/1.1 的推出可谓是“众望所归”,开启了后续的 “Web 1.0” “Web 2.0” 时代。现在许多的知名网站都是在这个时间点左右创立的,例如 Google、新浪、搜狐、网易、腾讯等。
HTTP / 2
经过 HTTP /1.1,整个互联网出现了爆炸式增长,这期间也出现了对 HTTp
不满的意见,主要集中在连接慢,更不上迅猛发展的互联网,但 HTTP/1.1 标准一直“岿然不动”,无奈之下人们只好发明各式各样的“小花招”来缓解这些问题,比如以前常见的切图、JS 合并等网页优化手段。
终于有一天,搜索巨头 Google 忍不住了,决定“揭竿而起”,就像马云说的“如果银行不改变,我们就改变银行”。那么,它是怎么“造反”的呢?
Google 首先开发了自己的浏览器 Chrome,然后推出了新的 SPDY 协议,并在 Chrome 里应用于自家的服务器,如同十多年前的网景与微软一样,从实际的用户方来“倒逼”HTTP 协议的变革,这也开启了第二次的“浏览器大战”。
历史再次重演,不过这次的胜利者是 Google,Chrome 目前的全球的占有率超过了 60%。“挟用户以号令天下”,Google 借此顺势把 SPDY 推上了标准的宝座,互联网标准化组织以 SPDY 为基础开始制定新版本的 HTTP 协议,最终在 2015 年发布了 HTTP/2,RFC 编号 7540。
这次协议的制定充分考虑了如今互联网的现状:宽带、移动、不安全在高度兼容 HTTP/1.1 的同时在性能改善方面做了很大努力,主要的特点有:
- 可发起多个请求,废弃了
HTTP/1.1
的管道。 - 增强了安全性,要求加密通信。
- 允许服务器主动向客户端推送数据。
- 二进制协议,不再是纯文本。
- 使用专用的压缩算法压缩头部,减少传输数据量。
虽然 HTTP/2
到今天已经四岁,也衍生出了 gRPC
等新协议,但由于 HTTP/1.1
实在是太过经典和强势,目前它的普及率还比较低,大多数网站使用的仍然还是 20 年前的 HTTP/1.1
。
HTTP/3
这时候谷歌开始 革自己的命
。在 HTTP/2
还处于草案之时,Google 又发明了一个新的协议,叫做 QUIC
,而且还是相同的“套路”,继续在 Chrome
和自家服务器里试验着 “玩”,依托它的庞大用户量和数据量,持续地推动 QUIC
协议成为互联网上的“既成事实”。
在去年,也就是 2018 年,互联网标准化组织 IETF
提议将“HTTP over QUIC”更名为“HTTP/3”并获得批准,HTTP/3
正式进入了标准化制订阶段,也许两三年后就会正式发布,到时候我们很可能会跳过 HTTP/2
直接进入 HTTP/3
。
老铁们期待么?
回顾
开篇回顾了 HTTP 协议的整个发展过程,总结下主要如下几点:
- HTTP 协议始于三十年前蒂姆·伯纳斯 - 李的一篇论文;
- HTTP/0.9 是个简单的文本协议,只能获取文本资源;
- HTTP/1.0 确立了大部分现在使用的技术,但它不是正式标准;
- HTTP/1.1 是目前互联网上使用最广泛的协议,功能也非常完善;
- HTTP/2 基于 Google 的 SPDY 协议,注重性能改善,但还未普及;
- HTTP/3 基于 Google 的 QUIC 协议,是将来的发展方向。
问答作业
- 你们觉得推进 HTTP 发展的动力是什么呢?
- 是怎么理解 HTTP(超文本传输协议)的?
欢迎读者后台回复 “HTTP发展” 获取我的回答参考,也欢迎加群跟我们一起讨论,发表你的见解。
HTTP 前世今生的更多相关文章
- 【调侃】IOC前世今生
前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...
- [C#] 回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性
回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性 序 目前最新的版本是 C# 7.0,VS 的最新版本为 Visual Studio 2017 RC,两者都尚未进入正式阶段.C# 6.0 ...
- docker4dotnet #1 – 前世今生 & 世界你好
作为一名.NET Developer,这几年看着docker的流行实在是有些眼馋.可惜的是,Docker是基于Linux环境的,眼瞧着那些 java, python, node.js, go 甚至连p ...
- Atitit 智能云网络摄像机的前世今生与历史 优点 密码默认888888
Atitit 智能云网络摄像机的前世今生与历史 优点 密码默认888888 用户名admin 密码aaaaaa 网络摄像机是一种结合传统摄像机与网络技术所产生的新一代摄像机,它可以将影像通过网络传 ...
- 阿里开源消息中间件RocketMQ的前世今生-转自阿里中间件
昨天,我们将分布式消息中间件RocketMQ捐赠给了开源软件基金会Apache. 孵化成功后,RocketMQ或将成为国内首个互联网中间件在Apache上的顶级项目. 消息一出,本以为群众的反应是这样 ...
- JavaScript的前世今生
和CSS一样,JavaScript在各浏览器下并非完全一致,它所带来的兼容性问题时常困扰着我们,以至于现在“能否处理流行浏览器的兼容性问题”成为了检验一个程序员是否合格的标准之一.了解JavaScri ...
- 主成分分析PCA的前世今生
这篇博客会以攻略形式介绍PCA在前世今生. 其实,主成分分析知识一种分析算法,他的前生:应用场景:后世:输出结果的去向,在网上的博客都没有详细的提示.这里,我将从应用场景开始,介绍到得出PCA结果后, ...
- SpringMVC源码剖析(二)- DispatcherServlet的前世今生
上一篇文章<SpringMVC源码剖析(一)- 从抽象和接口说起>中,我介绍了一次典型的SpringMVC请求处理过程中,相继粉墨登场的各种核心类和接口.我刻意忽略了源码中的处理细节,只列 ...
- (转)word2vec前世今生
word2vec 前世今生 2013年,Google开源了一款用于词向量计算的工具——word2vec,引起了工业界和学术界的关注.首先,word2vec可以在百万数量级的词典和上亿的数据集上进行高效 ...
- Spring学习总结(2)——Spring IOC的前世今生
前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...
随机推荐
- CSS盒子模型(boeder)+浮动(float)+定位(position)
盒子的上下层:margin--background-color--background-image--padding--content--border(最外层) 计算一个盒子宽 = 内容的宽(wid ...
- 在ASP.NET Core中创建基于Quartz.NET托管服务轻松实现作业调度
在这篇文章中,我将介绍如何使用ASP.NET Core托管服务运行Quartz.NET作业.这样的好处是我们可以在应用程序启动和停止时很方便的来控制我们的Job的运行状态.接下来我将演示如何创建一个简 ...
- 死磕Lambda表达式(六):Consumer、Predicate、Function复合
你的无畏来源于无知.--<三体> 在上一篇文章(传送门)中介绍了Comparator复合,这次我们来介绍一下其他的复合Lambda表达式. Consumer复合 Consumer接口中,有 ...
- Maximum splitting
Maximum splitting You are given several queries. In the i-th query you are given a single positive i ...
- API参数如何验证?别纠结,拿去用就是
今天我们主要分享项目实战中,另一种常用的参数校验框架 Hibernate Validator,请准备好小板凳,我们的分享开始. 1. 是啥? 先抛一张图,锻炼一下你的观察力. 通过上图有没有发现,数据 ...
- JS去除字符串内的空白字符方法
有时我们需要对用户的输入进行一些处理,比如用户输入的密码或者用户名我们就需要去除前后空格,下面写一个去除空白字符的方法 function trim(string = '') { return stri ...
- 如何使用Rancher在OpenStack上创建K8S集群
不可否认的是,OpenStack仍然是可行的云操作系统,并且被全世界许多互联服务提供商使用.而Rancher是业界最为广泛使用的Kubernetes管理平台,通过简洁直观的GUI集中管理企业IT中的多 ...
- Vue设置路由跳转的两种方法: <router-link :to="..."> 和router.push(...)
一.<router-link :to="..."> to里的值可以是一个字符串路径,或者一个描述地址的对象.例如: // 字符串 <router-link to= ...
- IP和端口查询
- Python安装MySQL数据库模块
背景 折腾: [记录]使用Python操作MySQL数据库 的过程中,需要去安装MySQLdb. 下载MySQLdb 去官网: http://pypi.python.org/pypi/MySQL-py ...