HTTP 2.0和HTTPS介绍说明

一、Web始祖HTTP

HTTP全称:超文本传输协议(HyperText Transfer Protocol)伴随着计算机网络和浏览器的诞生,HTTP 1.0也随之而来,处于计算机网络中的应用层,HTTP是建立在TCP协议之上,所以HTTP协议的瓶颈及其优化技巧都是基于TCP协议本身的特性,例如TCP建立连接的3次握手和断开连接的4次挥手以及每次建立连接带来的RTT延迟时间。

二、HTTP 1.0和HTTP 1.1的一些区别

HTTP 1.0最早在网页中使用是在1996年,那个时候只是使用一些较为简单的网页上和网络请求上,而HTTP 1.1则在1999年才开始广泛应用于现在的各大浏览器网络请求中,同时HTTP 1.1也是当前使用最为广泛的HTTP协议。 主要区别主要体现在:

1、缓存处理

HTTP 1.0主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP 1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since,If-Match,If-None-Match等更多可供选择的缓存头来控制缓存策略。

2、带宽优化及网络连接的使用

HTTP 1.0存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP 1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。

3、错误通知的管理

HTTP 1.1新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。

4、Host头处理

HTTP 1.0认为每台服务器都绑定一个唯一的IP地址,因此请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP 1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。

5、长连接

HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP 1.1中默认开启Connection:keep-alive,一定程度上弥补了HTTP 1.0每次请求都要创建连接的缺点。

三、HTTP 1.0和HTTP 1.1现存的一些问题

HTTP 1.x在传输数据时,每次都需要重新建立连接,无疑增加了大量的延迟时间,特别是在移动端更为突出。

HTTP 1.x在传输数据时,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份,这在一定程度上无法保证数据的安全性。

HTTP 1.x在使用时,header里携带的内容过大,在一定程度上增加了传输的成本,并且每次请求header基本不怎么变化,尤其在移动端增加用户流量。

虽然HTTP 1.x支持了keep-alive,来弥补多次创建连接产生的延迟,但是keep-alive使用多了同样会给服务端带来大量的性能压力,并且对于单个文件被不断请求的服务(例如图片存放网站),keep-alive可能会极大的影响性能,因为它在文件被请求之后还保持了不必要的连接很长时间。

四、HTTPS应声而出

为了解决以上问题,网景在1994年创建了HTTPS,并应用在网景导航者浏览器中。 最初,HTTPS是与SSL一起使用的;在SSL逐渐演变到TLS时(其实两个是一个东西,只是名字不同而已),最新的HTTPS也由在2000年五月公布的RFC 2818正式确定下来。简单来说,HTTPS就是安全版的HTTP,并且由于当今时代对安全性要求更高,Chrome和Firefox都大力支持网站使用HTTPS,苹果也在IOS 10系统中强制APP使用HTTPS来传输数据,由此可见HTTPS势在必行。

五、HTTPS与HTTP的一些区别

HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。

HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的。

HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

HTTPS可以有效的防止运营商劫持,解决了防劫持的一个大问题。

六、HTTPS改造

如果一个网站要全站由HTTP替换成HTTPS,可能需要关注以下几点:

安装CA证书,一般的证书都是需要收费的,这边推荐一个比较好的购买证书网站:

1、Let’s Encrypt,免费,快捷,支持多域名(不是通配符),三条命令即时签署+导出证书。缺点是暂时只有三个月有效期,到期需续签。

2、Comodo PositiveSSL,收费,但是比较稳定。

在购买证书之后,在证书提供的网站上配置自己的域名,将证书下载下来之后,配置自己的Web服务器,同时进行代码改造。

HTTPS降低用户访问速度。SSL握手,HTTPS对速度会有一定程度的降低,但是只要经过合理优化和部署,HTTPS对速度的影响完全可以接受。在很多场景下,HTTPS速度完全不逊于HTTP,如果使用SPDY,HTTPS的速度甚至还要比HTTP快。

相对于HTTPS降低访问速度,其实更需要关心的是服务器端的CPU压力,HTTPS中大量的密钥算法计算,会消耗大量的CPU资源,只有足够的优化,HTTPS的机器成本才不会明显增加。推荐一篇淘宝网改造HTTPS的文章——《淘宝HTTPS探索》,2015年的文章,还是有参考意义的。

七、使用SPDY加快你的网站速度

2012年Google如一声惊雷提出了SPDY的方案,大家才开始从正面看待和解决老版本HTTP协议本身的问题,SPDY可以说是综合了HTTPS和HTTP两者有点于一体的传输协议,主要解决:

1、降低延迟

针对HTTP高延迟的问题,SPDY优雅的采取了多路复用(Multiplexing)。多路复用通过多个请求stream共享一个TCP连接的方式,解决了HOL blocking的问题,降低了延迟同时提高了带宽的利用率。

2、请求优先级(Request Prioritization)

多路复用带来一个新的问题是,在连接共享的基础之上有可能会导致关键请求被阻塞。SPDY允许给每个request设置优先级,这样重要的请求就会优先得到响应。比如浏览器加载首页,首页的HTML内容应该优先展示,之后才是各种静态资源文件,脚本文件等加载,这样可以保证用户能第一时间看到网页内容。

3、header压缩

前面提到HTTP 1.x的header很多时候都是重复多余的。选择合适的压缩算法可以减小包的大小和数量。

4、基于HTTPS的加密协议传输

大大提高了传输数据的可靠性。

5、服务端推送(Server Push)

采用了SPDY的网页,例如网页有一个sytle.css的请求,在客户端收到sytle.css数据的同时,服务端会将sytle.js的文件推送给客户端,当客户端再次尝试获取sytle.js时就可以直接从缓存中获取到,不用再发请求了。

SPDY位于HTTP之下,TCP和SSL之上,这样可以轻松兼容老版本的HTTP协议(将HTTP 1.x的内容封装成一种新的frame格式),同时可以使用已有的SSL功能。

SPDY protocol
哪位大牛能说明一下这张图的用意。

八、HTTP 2.0的前世今生

顾名思义有了HTTP 1.x,那么HTTP 2.0也就顺理成章的出现了。HTTP 2.0可以说是SPDY的升级版(其实原本也是基于SPDY设计的),但是HTTP 2.0跟SPDY仍有不同的地方,主要是以下两点:

  • HTTP 2.0支持明文HTTP传输,而SPDY强制使用 HTTPS;
  • HTTP 2.0消息头的压缩算法采用HPACK,而非SPDY采用的DEFLATE。

九、HTTP 2.0的新特性

1、二进制格式(Binary Format)

HTTP 1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP 2.0的协议解析决定采用二进制格式,实现方便且健壮。

2、多路复用(MultiPlexing)

即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的id将request再归属到各自不同的服务端请求里面。

3、header压缩

HTTP 1.x的header带有大量信息,而且每次都要重复发送,HTTP 2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。

4、服务端推送(Server Push)

同SPDY一样,HTTP2.0也具有Server Push功能。目前,有大多数网站已经启用HTTP 2.0,例如YouTuBe、淘宝网等网站,利用Chrome控制台可以查看是否启用HTTP 2.0。

十、HTTP 2.0的升级改造

对比HTTPS的升级改造,HTTP 2.0或许会稍微简单一些,你可能需要关注以下问题:

前文说了HTTP 2.0其实可以支持非HTTPS的,但是现在主流的浏览器像Chrome、Firefox表示还是只支持基于TLS部署的HTTP 2.0协议,所以要想升级成HTTP 2.0还是先升级HTTPS为好。

当你的网站已经升级HTTPS之后,那么升级HTTP 2.0就简单很多,如果你使用NGINX,只要在配置文件中启动相应的协议就可以了,可以参考《NGINX白皮书》《NGINX配置HTTP 2.0官方指南》

使用了HTTP 2.0,那么原本的HTTP 1.x怎么办,这个问题其实不用担心,HTTP 2.0完全兼容HTTP 1.x的语义,对于不支持HTTP 2.0的浏览器,NGINX会自动向下兼容的。

后记

以上就是关于HTTP、HTTP 2.0、SPDY、HTTPS的一些基本理论,有些内容没有深入讲解,大家可以跟进参考连接具体查看。

关于HTTP 1.x的一些优化方式,例如:文件合并压缩、资源CDN、js优化、css优化等等,同样可用与HTTP 2.0和HTTPS,所以Web前端的优化,还是要继续进行。

其实Web发展如此迅速的今天,有些技术是真的要与时俱进的,就像苹果宣布IOS 10必须使用HTTPS开始,关于Web协议革新就已经开始了,为了更好的性能,更优越的方式,现在就开始升级改造吧。

原文引自:https://blog.csdn.net/yanghaolong/article/details/90764913

基于原文略有调整,如有不对之处还请指正。
Tags: , ,

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注