HTTP的发展历史和各个版本差别
HTTP前世今生
1989年,蒂姆·伯纳斯-李发表论文确立了三项关键技术:
- URI: 统一资源标志符,作为互联网上资源的唯一身份
- HTML: 超文本标记语言,描述超文本文档
- HTTP: 超文本传输协议,用来传输超文本
基于这三项技术,就可以把超文本系统完美地运行在互联网上,让各地的人们自由共享信息,这个系统就是"万维网",现在的Web.因此,这一年(1989年),HTTP诞生.
HTTP/0.9
由于20世纪90年代初期互联网世界的简陋,收到硬件技术的限制,这个时期的HTTP被定义为0.9版,结构简单,采用了纯文本格式来便于服务端和客户端的处理.蒂姆·伯纳斯-李最初的设想是系统中的文档都是只读的,所以只允许用"GET"动作来获取文档,并且响应请求之后立即关闭连接,功能有限. 简单的来说这个时期的HTTP的设计受到了时代的限制.
HTTP/1.0
1993年,NCSA(美国国家超级计算应用中心)开发出Mosaic,是第一个图文混排的浏览器,随后又在1995年开发出服务器Apache,简化HTTP服务器的搭建工作,同时期的多媒体技术也发展很快,MP3等,这些新的技术使得HTTP进一步发展,与1996年正式发布HTTP/1.0,形式上和现在的HTTP差别不大了,例如:
- 增加HEAD POST等新方法
- 增加响应状态码,标记可能的错误原因
- 引入协议版本号概念
- 引入HTTP HEADER(头部)概念,让HTTP处理请求和响应更灵活
- 传输的数据不再仅限于文本
但是HTTP/1.0并不是一个"标准",只是记录已由实践和模式的一份参考文档,相当于一个"备忘录".
HTTP/1.1
1995年,网景的Netscape Navigator和微软的IE进行浏览器大战,争取互联网主导地位,最后IE获胜(后来网景凭借Mozilla Firefox扳回一局)
这次的大战极大的推动了互联网的发展,HTTP/1.0在这个过程中经受了实践的检验,之后再1999年,HTTP/1.1发布了REC文档,编号2616. HTTP/1.1是对HTTP/1.0的小幅度修改,最重要的区别是1.1是一个"正式的标准",而不是参考文档,意味着今后互联网上所有的浏览器、服务器、网关、代理等,只要用到HTTP协议,就需要遵守这个标准.
HTTP/1.1主要的变更点:
- 新增PUT、DELETE等新的方法
- 增加了缓存管理和控制
- 明确了连接管理,允许持久连接
- 允许响应分块(chunked),利于传输大文件
- 强制Host头,让互联网主机托管成为可能
HTTP/2
HTTP/1.1标准经过多年,出现的问题主要就是连接慢,无法跟上迅速发展的互联网.这种情况下Google开发浏览器Chrome,推出新的SPDY协议,并用在Chrome中,开启了第二次"浏览器大战",这次是Google获胜,趁此将SPDY推上标准王座,互联网标准化组织以SPDY为基础开始制定新版本的HTTP协议,最终于2015年发布HTTP/2,RFC编号是7540.
HTTP/2的制定充分考虑了现在互联网的现状: 宽带、移动、不安全,在高度兼容1.1的同时在性能改善方面做了很大努力,主要特点有:
- 二进制协议,不再是纯文本
- 可发起多个请求,废弃1.1中的管道
- 使用专用算法压缩头部,减少数据传输量
- 允许服务器主动向哭护短推送数据
- 增强安全性,事实上要求加密通信
目前HTTP/2的普及率还比较低,主要是因为HTTP/1.1太经典和强势,所以大部分网站还是HTTP/1.1.
SPDY协议是基于TCP会话层的协议,主旨在于最小化网络延迟,提升网络速度.
HTTP/3
在HTTP/2还处于草案之时,Google又发明了一个新的协议,叫做QUIC,而且相同的套路,继续在chrome和自家服务器实验着玩,依托于庞大的用户量和数据量,持续地推动QUIC协议成为互联网上的"既成事实".
2018年,互联网标准化组织IETF提议将"HTTP over QUIC"更名为"HTTP/3"并获得批准,HTTP/3进入标准化制定阶段,也就两三年后就会发布.
QUIC是基于UDP的协议,主旨在于低时延.
总结
- HTTP协议始于1989年蒂姆·伯纳斯-李的一篇论文
- HTTP/0.9是个简单的文本协议,只能获取文本资源(get获取纯文本)
- HTTP/1.0确立了现在使用的大部分技术,但不是正式标准
- HTTP/1.1是目前互联网使用最为广泛的协议,功能也非常完善(第一个标准文档).
- HTTP/2基于Google的SPDY协议,注重性能改善,但还未普及
- HTTP/3基于Google的QUIC协议,是将来的发展方向
TCP是河,HTTP是船
HTTP的发展历史和各个版本差别的更多相关文章
- CentOS以及Oracle数据库发展历史及各版本新功能介绍, 便于构造环境时有个对应关系
CentOS版本历史 版本 CentOS版本号有两个部分,一个主要版本和一个次要版本,主要和次要版本号分别对应于RHEL的主要版本与更新包,CentOS采取从RHEL的源代码包来构建.例如CentOS ...
- <反向传播(backprop)>梯度下降法gradient descent的发展历史与各版本
梯度下降法作为一种反向传播算法最早在上世纪由geoffrey hinton等人提出并被广泛接受.最早GD由很多研究团队各自发表,可他们大多无人问津,而hinton做的研究完整表述了GD方法,同时hin ...
- .net版本发展历史
最近装上了VS2013,发现好多新特性.新功能,公司办公还在使用VS2005.VS2008,不过用着也很顺手,在最新版Visual Studio中,微软加入了git源码管理工具,和之前的TFS大体上类 ...
- ArcGIS(ESRI)的发展历史和版本历史(简介)
作者:fenghuayoushi 来源:CSDN 原文:https://blog.csdn.net/fenghuayoushi/article/details/6677360 ESRI公司介绍 ...
- Java SE/EE/ME概念理解(Java版本发展历史)
继上一篇文章http://www.cnblogs.com/EasonJim/p/6181981.html中说的区别,其实分析的不够彻底,因此再次在这里做详细的分析. 零.Java与Sun.Oracle ...
- 【转载】Web开发技术发展历史-版本1
原文在这里. Web开发技术发展历史 Web的诞生 提到Web,不得不提一个词就是“互联网”.Web是World Wide Web的简称,中文译为万维网.“万维网”和我们经常说的“互联网”是两个联系极 ...
- Linux实战教学笔记03:操作系统发展历程及系统版本选择
标签(空格分隔): Linux实战教学笔记-陈思齐 第1章 Linux简介 1.1 什么是操作系统? 简单讲:操作系统就是一个人与计算机硬件的中介. 操作系统,英文名称Operating System ...
- 软件项目发展历史<人月神话>这本书好
几乎是计算机软件开发的发展历史 人月神话,增加人手并不一定能提高开发速度. 原因在于,有些任务是无法分解的,存在先后顺序.无法同步进行. 增加人手,增加的是沟通成本,相互牵制.可以分解的任务就 ...
- Hadoop发展历史简介
简介 本篇文章主要介绍了Hadoop系统的发展历史以及商业化现状, 科普文. 如果你喜欢本博客,请点此查看本博客所有文章:http://www.cnblogs.com/xuanku/p/index.h ...
随机推荐
- yield_from
python3.3 新加的yield from 语句 1.yield from def my_chain(*args, **kwargs): for my_iterable in args: yiel ...
- TortoiseSVN客户端(七)
TortoiseSVN 是一个 Windows 下的版本控制系统 Apache™ Subversion®的客户端工具. 一.安装 官网下载地址:https://tortoisesvn.net/down ...
- c#窗体之登录页(已连接数据库)
效果图: 源码: 页面: using System; using System.Collections.Generic; using System.ComponentModel; using Syst ...
- 为什么说要搞定微服务架构,先搞定RPC框架
今天开始聊一些微服务的实践,第一块,RPC框架的原理及实践,为什么说要搞定微服务架构,先搞定RPC框架呢? 一.需求缘起 服务化的一个好处就是,不限定服务的提供方使用什么技术选型,能够实现大公司跨团队 ...
- 日常笔记5C/C++快速入门一些基础细节
一.变量数据类型 int大致范围:-210^9~210^9 long long大致范围:-910^18~910^18,对于长整型来说,如果赋值大于2^31-1的初值,就需要在初值后面加上LL,否则会编 ...
- 第02组 Beta冲刺(3/4)
队名:十一个憨批 组长博客 作业博客 组长黄智 过去两天完成的任务:了解整个游戏的流程 GitHub签入记录 接下来的计划:继续完成游戏 还剩下哪些任务:完成游戏 燃尽图 遇到的困难:没有美术比较好的 ...
- [LeetCode] 155. Min Stack 最小栈
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time. pu ...
- [LeetCode] 116. Populating Next Right Pointers in Each Node 每个节点的右向指针
You are given a perfect binary tree where all leaves are on the same level, and every parent has two ...
- CSP-S考前救急(考试前还是别复习了,事实证明复习了也没考到...
“不要为明天而忧虑,因为明天自有明天的忧虑:一天的难处一天当就够了.” 念念不忘,必有回响. 考试结束前15分钟停止写代码.然后按照以下顺序进行检查: -检查文件名是否写错-检查是否打开文件输入输出 ...
- Django性能优化的几种方法
1.一次性取出你所需要的数据 单一动作,需要多次连接数据库里的时候,最好一次性取出所有需要的数据,减少连接数据库的次数.此类需求推荐使用QuerySet.select_related()和prefet ...