HTTP协议的发展历史

学习发展历史有何用,我来说说我的看法

读之前,我给大家说说我对于发展历史的看法,对于很多人来说,某个学科,某个东西的发展历史,是最没人学的,因为很枯燥,而且很没有用。但事实上,因人而异,因为发展的历史的每个阶段,必然有每个阶段存在的原因,里面蕴藏着很多设计思想,思考的过程,如果能读懂这些,将会受益匪浅,并非对我们的工作没有,但是明白这些思想的前提,是你需要有可以理解这个思想,相关的经验和思想基础,如果没有,再怎么理解,也只是片面的理解,没有多大的用处。

HTTP/0.9

  1. 最早的时候,定稿的HTTP协议是HTTP/0.9 这个版本,协议的内容非常非常的简单,只有一个GET命令,GET请求,GET方法,统称为命令。
  2. 没有HEAER等描述数据的信息,因为在那个时代,需要达到的目的非常的简单,所以没有那么多不同的数据格式。
  3. 服务器发送完毕,就关闭TCP连接,这里的HTTP连接和HTTP请求是不一样的,一个HTTP连接,可以发送一个或者一个以上的HTTP请求。

HTTP/1.0

  1. 增加了很多命令, 例如, POST, PUT, DELETE。
  2. 增加status code和header
    status code: 描述我们请求一个服务端之后,返回的状态。
    header: 我们请求的数据和服务返回的数据的相关描述和方法。
  3. 增加了多字符的支持、多部分发送、权限、缓存等,更有利于去实现每一个web服务。

HTTP/1.1

在HTTP/1.0的基础之上,增加了一些功能,来优化整个网络链接的过程。

  1. 增加了持久连接 ,因为在之前的HTTP版本,每发送一个请求,就会创建一个TCP连接(三次握手),请求完之后,还会关闭连接,整个过程性能的消耗比较大,而持久连接,减少了创建连接的次数,提高了性能。
  2. pipleline,管道传输的功能,使得发送端可以在一个连接中,可以发送多个请求(并非同时!!!),但是需要注意的是,服务端对于这些请求,是按照顺序处理的,一个请求处理完成之后,才可以进行下一个请求。于是,如果一个请求的数据比较大,处理比较复杂,那么它的后一个请求,必须等待它处理完之后,才可以得到处理,会有较长的等待时间。所以说,虽然可以,一个连接中发送多个请求,但是处理过程是串行处理,而非并行,所以还是具有很大的优化余地的。
  3. 增加了host和一些其他的命令,有了host之后,可以在同一个台物理服务器,同时运行多个不同的web服务,例如,node.js, java, python,这些服务,host可以判断,是访问哪个web服务器。
    好处: 可以在同一个物理服务器,或者集群里面,部署不同的web服务,来进行一个使用,提高物理服务器的使用效率。

HTTP2

虽然还未普及,但是它将是一个趋势,未来的潮流。

  1. 所有的数据二进制传输,而HTTP1大多数数据,是使用字符来传输的,所以使用的数据流的分片方式,不太一样。
  2. HTTP2 使用 帧(Frame)来传输 ,同一个连接里面发送的多个请求不再需要按照顺序来,它可以,同时返回多个请求中的数据,实现并行处理,但是在不同的浏览器中,并行处理的请求数量有限制,比如chrome就是6个,但是六个之外的请求,必须等待前面六个请求,服务器才会处理后面的请求。总的来说就是,以六个为一组,组间串行,组内并行。并行处理的新特性,使得HTTP的性能有了,质的提升。
  3. 头信息压缩以及推送等提高效率的功能
    头信息压缩:HTTP1里,很多header都是需要进行完整的发送,和完整的返回,很多信息都是使用字符来储存的,所以占据的带宽比较大。HTTP2,能够对我们的headers信息进行有效的压缩,减少我们的带宽使用,提高性能。
    推送功能: HTTP2可以主动发起一些数据传输,我们知道,HTTP2之前的版本,我们的浏览器,请求完html之后进行解析在html之中的链接,css, js 等文件,然后再根据链接的地址,才能发起相关请求。而HTTP2,可以将需要请求的css,js等文件,在请求html的同时,推送给请求端,顺序是并行的,整体的效率将会有很大的提升。

总结

HTTP的进化过程,主要原因都是因为业务的需求越来越复杂而进化的。而HTTP2相比于HTTP/1.1,性能得到非常大的提升,主要来源于,增加了并行处理数据的特性。从这点中,我们也可以学习到这个设计思想,应用于以后的业务中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值