HTTP/1.0、HTTP/1.1、HTTP/2.0版本的区别以及HTTPS

tcp/ip

要了解HTTP的话我们不得不提一下tcp/ip协议
tcp/ip协议就是利用ip进行计算机间通信的协议群的总称,HTTP是tcp/ip协议里面的子集,HTTP通信的建立,包括我们熟悉的三次握手四次挥手等,都是建立tcp连接时的机制,关于tcp/ip网上有很多资料,这里不做扩展。

HTTP

http协议的是一种建立在请求响应模式下的,用于客户端与服务端进行通信的协议,其主要特点有:
1、基于请求响应模式,即客户端发送请求服务器响应请求。
2、HTTP是不保存状态的协议,也就是说当客户端完成一次请求之后,客户端不会记住上次发送了什么请求,服务器不会记得上次发送了什么响应。这种机制是为了更快的处理更多事务,但是随着发展这种方式不太符合需求,后续引入了cookie技术保存状态。
3、HTTP使用URI请求网络资源,所以在互联网任意地方的资源都能访问到

因为HTTP/0.9版本并未作为正式版本建立,所以本文主要讨论的是HTTP/1.0及其之后的版本与相关技术。

HTTP/1.0
HTTP/1.0版本是1996正式提出的技术,但是现在在很多地方依旧有着应用,特别是代理服务器领域。HTTP/1.0是一种默认短连接的协议,就是说一个请求结束之后就断开连接,下次请求时重新建立新的连接,这种设计在最开始是为了提高服务器的效率,因为保持连接状态是需要服务器开销的,但是随着人们对互联网需求的不断增大,并且网络带宽不断增加的情况下,这种无法复用连接的方式成为了制约HTTP/1.0的主要因素之一,因为现在的网络请求可能是同时间的大量请求,例如我们访问网站时,一次可能需要同时请求网站的css、js、html和各种图片,如果每次请求都需要建立连接,那么在建立连接上就需要消耗大量资源。
HTTP/1.0另一个被人诟病的原因就是head of line blocking(队头阻塞),在HTTP/1.0版本中,上次请求完成后才能发送下一次请求,也就导致了,如果某次请求耗时特别长,会使得后续的请求都被阻塞而不能发出。

HTTP/1.1
为了应对HTTP/1.0版本中出现的各种问题,1996年5月,HTTP诞生了1.1版本,HTTP/1.1是现在应用最广泛的HTTP协议,其主要是为了解决HTTP/1.0中的两大问题。
首先HTTP/1.1默认的事建立长连接,也就是说,当一次连接建立之后,短时间发出的请求都可以使用这一个连接发出,减少了建立连接时的资源消耗,同时,HTTP/1.1还允许客户端在不接收上次请求的响应的情况下发送新请求,但是在服务端,会依次对客户端发送的请求按次序回送响应,保证客户端能够区分每次请求的响应内容。
此外,HTTP/1.1在其它方面也做了很多优化,HTTP/1.1版本加入了更多的首部字段扩张HTTP协议的功能,比如HTTP/1.1加入了Host头域实现了在一台WEB服务器上可以在同一个IP地址和端口号上使用不同的主机名来创建多个虚拟WEB站点。HTTP 1.1还提供了与身份认证、状态管理和Cache缓存等机制相关的请求头和响应头,并且还提供了断点续传功能。

SPDY
HTTP/1.1解决了1.0版本中出现的很多问题,但是,随着新的需求的出现,HTTP/1.1的瓶颈也逐渐显露,例如,我们熟悉的微博,一个微博用户的粉丝可能是成千上万,如果一个博主发送了一篇微博,为了在所有粉丝的客户端接收到最新信息,在客户端就必须发送大量的请求去询问是否有资源更新,如果没有资源更新,那么就会发送很多无用的请求。
HTTP/1.1的瓶颈主要有一下几个方面:
1、一条连接上只可发送一个请求。
2、请求只能从客户端开始。客户端不可以接收除响应以外的指
令。
3、请求 / 响应首部未经压缩就发送。首部信息越多延迟越大。
4、发送冗长的首部。每次互相发送相同的首部造成的浪费较

对于上述的需求,以前的HTTP请求的解决办法是发送大量的ajax请求,ajax请求可以做到局部刷新,使得每次的响应体没有那么大,一定程度上解决了性能问题,并可以实现消息的实时推送,但是ajax也只是一种局部刷新机制,并没有本质上解决HTTP协议出现的问题。
基于以上问题,在2012年,谷歌提出了SPDY的设计方案,大大的提升了HTTP协议的性能。
SPDY并不是对HTTP协议的改写,而是在应用层之下加入了一个会话层,通过这个会话层来控制数据的流动,同时,为了加强数据的安全性SPDY 规
定通信中使用 SSL(后面会介绍):

使用SPDY之后,HTTP协议扩展了以下的功能:
1、多路复用流:通过一个tcp连接,可以处理无限多个请求,所有的请求都在一个tcp连接中完成,使得处理效率得到提高。
2、赋予请求优先级:SPDY可以赋予请求不同的优先级,使得在网络带宽不够时,大量请求也不会使得响应变慢。
3、压缩HTTP首部:对HTTP首部进行压缩,这样就使得通信产生的数据包和发送的字节数更少。
4、服务器推送功能:支持服务器主动给客户端发送消息,这样一来,使得服务端不必每次都等待客户端的请求,客户端也不必使用ajax长轮询的方式获得最新数据。
5、服务器提示功能:服务器可以主动提示客户端请求所需的资源。由于在客户端发现资源之前就可以获知资源的存在,因此在资源已缓存等情况下,以避免发送不必要的请求。
虽然SPDY的出现解决了很大一部分HTTP协议的问题,但是SPDY并没有被大规模退推广,其主要的问题是SPDY强制使用SSL,但是不是每一家网站都有证书,毕竟证书不便宜,所以到目前为之,也只有谷歌和一些稍大的公司开启了SPDY。

HTTP/2.0
HTTP/2.0是SPDY的升级版本,是基于SPDY方案设计的一套HTTP协议,所有有着SPDY的优点、但是与SDPY还是有一些区别,比如:
1、HTTP2.0 支持明文 HTTP 传输,而 SPDY 强制使用 HTTPS
2、HTTP2.0 消息头的压缩算法采用 HPACK ,而非 SPDY 采用的DEFLATE
HTTP/2.0与HTTP/1.X的区别除了使用SPDY机制外,还做了一个优化:
HTTP/1.X的版本是基于文本解析的,但是文本类型是各种各样的,这就导致为了使得能够解析不同文本,就必须考虑很多方面,针对这个问题,HTTP/2.0的解析采用了基于二进制的方式,加强的程序的健壮性。

HTTPS

首先我们先来讲一下HTTP协议中的安全性问题 在http协议中,所有的数据都是通过明文的方式发送到服务端,服务端发送的响应也是以明文的方式发送给客户端,互联网的特性使得在世界的各个角落,我们的数据都可能被劫持到,如果被劫持的数据是明文发送的,那么就使得我们的数据变得及其不安全,这时候,就需要对数据在发送的过程中进行加密处理,但是HTTP协议本身是没有加密机制的,但是可以与SSL/TLS来加密HTTP的内容。 现在的HTTPS都是基于TLS,是由于SSL出现的时间比较早,并且依旧被现在浏览器所支持,因此SSL依然是HTTPS的代名词。 HTTPS并不是一种新的协议,而是在HTTP协议与TCP通信的中间加入一个SSL层,使得HTTP先于SSL通信,然后SSL再与TCP通信。简言之,所谓 HTTPS,其实就是身披SSL协议这层外壳的 HTTP。值得一提的是,SSL是独立于 HTTP 的协议,所以不光是 HTTP 协议,其他运行在应用层的 SMTP 等协议均可配合 SSL协议使用。可以说 SSL是当今世界上应用最为广泛的网络安全技术。 关于SSL/TLS技术里面牵扯到加密算法和证书等,这里不做过多介绍,感兴趣的化可以找更多资料拓展,因为本人也是初学,可能在论述过程中有错误,欢迎大家指出来,一起进步。 关于HTTP协议的学习,个人推荐一本入门的《图解HTTP》,适合新手看,不像其他专业书那么难懂,很容易理解。