在最早的时候,第一个定稿的http协议是http/0.9版本,在这个版本里面,http协议,它的内容,非常非常的简单 只有一个命令,就是GET 对应的就是我们现在经常用到的get请求,post请求,这些统称为http的命令或者叫做方法,那么后面会有一节课会有详细的讲解,关于http命令的内容
然后那个时候是 没有header等描述数据信息的一些内容 因为那个时候它的请求是非常简单,它需要达到的目的也非常的简单,没有那么多不同的数据格式。
第三个,就是 服务器发送完内容之后,就把tcp链接给关闭了 在这里,大家需要去明确一点,就是我们这边提到的连接,跟我们http请求是不一样的,如果大家做过一些web开发,应该会听到一些,我们http请求的并发数这样的一些术语的描述。那么在这里面,我们要弄清楚一点就是http请求跟tcp连接它不是一个概念。在同一个tcp连接里面,我们可以发送很多个http请求,以前的协议版本是不能这么做的,但在现在在http1.1里面,我们是可以这么做了,而且在http2里面是会更大的去优化相关的一些东西,来提高我们http协议传输的一些效率,以及服务器的性能,所以这边tcp链接对应的是多个http请求。而一个http请求是肯定在一个tcp链接里面去进行发送的,所以这点概念要清楚

之后第二个版本就是http/1.0版本,这个版本跟我们现在在普遍使用的1.1其实已经差不了多少,在这个版本里面,它增加了很多命令,比如post,put,header这些命令,第二个是增加了status code 和 header相关的内容,code是服务端去处理某个请求之后,它的一个状态,而header对应的就是我们的不管是发送,还是请求的相关的一些数据,它的描述以及我们如何对这部分数据进行操作的方法,其它还增加了多字符集支持、多部分发送、权限、缓存等内容,那么这些东西能够更好的有利于我们去使用http请求,去实现我们一个web服务。

接下去就到我们http/1.1版本,这个版本只是在http/1.0上面增加了一些功能,来优化整个网络链接,在这个版本里面,它支持了持久连接,持久连接什么意思呢?在1.0版本里面,我们一个http请求,就要去发送,就要在客户端,服务端之间创建一个tcp链接,创建这个tcp链接之后在服务端返回内容之后,这个tcp链接就关闭掉了,那么这个成本是相对比较高的,因为在下一课我们会讲到,建立一个http链接的过程当中,我们要3次握手,那么这部分是在tcp协议里面去做掉的,所以我们不需要关心,但是我们要知道,在这个创建的过程它们的消耗是比较高的,延迟也会比较高,所以我们在建完了一个链接之后,它可以不关闭,那么以后新的http请求可以一直在这个链接里面进行发送的话,那么它的性能肯定会高很多,所以这个在http1.1里面,已经给我们去实现了
第二部分,它增加了pipeline,我们可以在同一个链接里面发送多个请求,但在http/1.1里面,我们发送的请求是可以在同一个链接里面发送多个的,但是在服务端我们对于进来的请求,我们都是要按照一个顺序进行一个内容的返回,所以如果前一个请求,它的等待时间,非常的长,而后一个请求它处理的也比较快,那这个时候,后一个请求,它不能先发送,要第一个请求数据发送完成之后,它才能进行发送,所以这一部分时间就相当于一个串行,一个并行,它里面的性能的差异就体现出来了,而这个,在http/2.0里面酒会进行一个优化
第三个就是增加了一些http的头和命令,那这些就不详细讲了,因为它增加的内容也不是特别的多,其中一个比较重要的就是host,有了host之后,我们就可以在同一台服务器,我指的服务器是物理服务器,在这个服务器上,我们可以跑多个不同的服务。比如一个nodejs的web服务和java的web服务,然后通过host这个字段,来表示我请求的是这台物理服务器上面,但是我要请求的是里面哪一个软件服务,是node还是java,这是通过host来进行判断的,它增加的好处就是同一个服务器或者同一个集群里面,我们可以部署很多不同的web服务来进行一个使用,这样的话,提高一个我们物理服务的使用效率

接下来是http2,http2现在还没有普及,但是这是后面的趋势,这是毫无疑问的,在http2里面所有数据以二进制传输的,在http1里面,我们大部分的传输是以字符串的形式传输,所以它数据都分片方式是不太一样的,在http2里面,我们所有的数据,都是以侦进行传输的,而同样是因为有了这个好处,所以我们同一个连接里面发送多个请求就不再按照顺序来进行一个返回处理了,它可以同时返回第一个请求里面的数据,再同时返回第二个请求里面的数据,让整个web应用的传输效率有一个质的提升
第三部分是头信息压缩以及推送等提高效率的功能,http2整体上就是为了解决http1.1里面它的一些性能低下的问题,头信息压缩是什么概念呢,在http/1.1里面,我们每一次发送请求和返回请求,它的http头信息都要进行一个完整的发送和返回的,但其实这部分头信息呢,里面很多的内容,比如说它的header的字段,cache这些是以字符串的形式保存,所以它占用带宽的量是比较大的,在http2里面,我们头信息进行了一个压缩,这个压缩可以有效的减少我们的带宽使用,第二个是推送的功能,那么推送功能是什么呢?我们知道http请求,我发送了请求,然后你那边响应请求,再返回内容,就是说客户端永远是主动方,服务端永远是被动方,在http2里面我们有了推送这个概念,也就是说服务端是可以主动发起一些数据传输的,那这个时候,它解决了什么问题呢?举一个最简单的例子,我们知道html,我们的web页面,都要求有一些css和js文件,那么都是以连接的方式在html里面显示着,通过浏览器解析之后,再根据连接里面包涵的url地址,我们再去请求对应的css和js文件,这里面就会包涵一个顺序的问题,我们需要先请求到html的文本,然后在浏览器里面运行,解析了这个文本之后,我们才能去发送css请求和js请求,那http2里面有了推送的功能之后,我们在请求html的同时,可以主动把html里面所需要引用到css文件和js文件推送到我们到客户端,这样到话,我们的html,css,和js,它的发送顺序是并行的,而不是串行的,这样一讲,大家都能理解,它整体的传输效率和性能肯定是要高非常多的
ok,这就是http协议的历史,其中当然还有https,https是http的安全版本,它实际使用的内容跟http/1.1没有很大的区别

http协议的发展历史的更多相关文章

  1. Http协议基础及发展历史

    一.网络分层协议 经典五层模型 1.物理层:(电脑的硬件,网卡端口,网线,网线连出去的光缆) 定义物理设备如何传输数据 2.数据链路层 在通信的实体间建立数据链路连接. 两台机器物理上是可以连接在一起 ...

  2. HTTP从入门到入土(2)——HTTP协议发展历史

    HTTP协议的发展历史 HTTP/0.9 0.9版本是第一个定稿的HTTP版本,相对较为简陋.它有以下特点: 只有一个命令GET 没有header等描述数据的信息 服务器发送完毕,就关闭TCP连接 注 ...

  3. HTTP 协议基础及发展历史

    一. 5层网络模型介绍 低三层 物理层:主要作用是定义物理设备如何传输数据. 数据链路层:在通信的实体间建立数据链路连接. 网路层:为数据在结点之间传输创建逻辑链路. 传输层: 想用户提供可靠的端到端 ...

  4. Web开发技术发展历史

    Web开发技术发展历史   来自:天码营 原文:http://www.tianmaying.com/tutorial/web-history Web的诞生 提到Web,不得不提一个词就是"互 ...

  5. Linux发展历史大事编年表(截止2013年)

    这篇文章主要介绍了Linux发展历史大事编年表(截止2013年),Linux现在已经无处不在,是一个伟大的开原项目,让我一起来看看23年来它的发展历程吧   我们周围到处都有Linux的身影,在家中. ...

  6. JavaScript 、ECMAScript、commonJS 发展历史 与标准化发展

    本文介绍下JavaScript和 ECMAScript的诞生及发展历史,以及标准化过程. 一.JavaScript诞生 1994年,网景公司(Netscape)发布了Navigator浏览器0.9版. ...

  7. Erlang cowboy 入门参考之现代Web的发展历史

    Erlang cowboy 入门参考之现代Web发展史 原文: http://ninenines.eu/docs/en/cowboy/1.0/guide/modern_web/ 让我回顾一下web技术 ...

  8. Linux发展历史

    一.硬件与软件发展历史 计算机由硬件和软件组成结构 硬件 1946年诞生于宾夕法尼亚州,占地170平米,重量达到30吨,名字叫做ENIAC(electronic numerical integrato ...

  9. PHP进阶-浏览器到PHP发展历史

    从浏览器到PHP发展历史 php-cgi实现cgi的解析器,每个fork过程都开启一个进程,并会进行一个关闭进程的操作. 长注内存解释器(一个进程) fastcgi 多进程共享一个端口是一个问题,多进 ...

随机推荐

  1. Photoshop入门教程(一):文本新建与概念解析

    写在开头 <Photoshop实用入门>系列教程可能对于一点都没有接触过Photoshop的人来说不太容易接受,因为本教程并没有细致到教你如何使用画笔工具等一系列很基础的东西,有些地方的讲 ...

  2. 使用wget下载oracle jdk1.8

    wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com% ...

  3. STL-----c++标准模板

    一.排序和检索 1.sort(v.begin,v.end) 2.lower_bound(v.begin,v.end,x)

  4. python groupby的小技巧

    df.groupby('col',as_index=False),agg(ufunk)#as_index=False,可以消除层次索引 更多grouby的用法 http://blog.csdn.net ...

  5. Unity ContextMenu 上下文菜单

    新建脚本: public class ContextTesting : MonoBehaviour { [ContextMenu("哈哈")] void DoSomething() ...

  6. 性能测试工具LoadRunner16-LR之Controller 负载运行时设置

  7. PHP 7 的几个新特性

    1. ?? 运算符(NULL 合并运算符) 把这个放在第一个说是因为我觉得它很有用.用法: $a = $_GET['a'] ?? 1; 它相当于: <?php $a = isset($_GET[ ...

  8. Win2D 官方文章系列翻译 - 像素格式

    本文为个人博客备份文章,原文地址: http://validvoid.net/win2d-pixel-formats/ DirectXPixelFormat 枚举 包含了 Direct3D 和 DXG ...

  9. spring整合web的ssh(springMVC、hibernate)

    1. tomcat启动时,加载配置文件,将bean装在 导入jar包spring-web..jar 2.确定配置文件位置 3.spring整合hibernate <!-- 加载hibernate ...

  10. 设置checkbox只读

    1.checkbox没有readonly属性,所以在checkbox添加readonly属性是没有作用的. <input type="checkbox" readonly=& ...