HTTP、HTTP1.1、HTTP2、HTTPS的区别

知识点梳理

HTTP协议

HTTP1.0HTTP1.1的区别

SPDYHTTP1.x的优化

HTTP2.0SPDY的升级版

HTTP2.0SPDY的区别:

HTTP2.0 HTTP1.X 的区别

HTTP2.0的升级改造

HTTPS

HTTP协议的缺点:

HTTPS协议

HTTPHTTPS主要区别

HTTPS的缺点

网站从http切换到HTTPS实现

附注:

HTTP2.0的多路复用和HTTP1.X中的长连接复用的区别

HTTP2.0多路复用有多好?

服务器推送

SSLTLS的区别?

MINI类型

HTTP协议

HTTP用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。

HTTP、HTTP1.1、HTTP2、HTTPS的区别

HTTP1.0HTTP1.1的区别

  1. 缓存处理,在HTTP0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1引入了更多的缓存控制策略例如Entity tagIf-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
  2. 带宽优化及网络连接的使用,HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者*的选择以便于充分利用带宽和连接。
  3. 错误通知的管理,在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
  4. Host头处理,在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址,host就是用来在一个ip地址上找到需要的虚拟主机HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。
  5. 长连接HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。

SPDYHTTP1.x的优化

2012年google如一声惊雷提出了SPDY的方案,优化了HTTP1.X的请求延迟,解决了HTTP1.X的安全性,具体如下:

  1. 降低延迟,针对HTTP高延迟的问题,SPDY优雅的采取了多路复用(multiplexing。多路复用通过多个请求stream共享一个tcp连接的方式,解决了HOL blocking的问题,降低了延迟同时提高了带宽的利用率。
  2. 请求优先级(request prioritization)。多路复用带来一个新的问题是,在连接共享的基础之上有可能会导致关键请求被阻塞。SPDY允许给每个request设置优先级,这样重要的请求就会优先得到响应。比如浏览器加载首页,首页的html内容应该优先展示,之后才是各种静态资源文件,脚本文件等加载,这样可以保证用户能第一时间看到网页内容。
  3. header压缩。HTTP1.x的header很多时候都是重复多余的。选择合适的压缩算法可以减小包的大小和数量
  4. 基于HTTPS的加密协议传输,大大提高了传输数据的可靠性
  5. 服务端推送(server push),采用了SPDY的网页,例如我的网页有一个sytle.css的请求,在客户端收到sytle.css数据的同时,服务端会将sytle.js的文件主动推送给客户端,当客户端再次尝试获取sytle.js时就可以直接从缓存中获取到,不用再发请求了。SPDY构成图:

HTTP、HTTP1.1、HTTP2、HTTPS的区别

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

HTTP2.0:SPDY的升级版

HTTP2.0和SPDY的区别:

  1. HTTP2.0 支持明文 HTTP 传输,而 SPDY 强制使用 HTTPS
  2. HTTP0 消息头的压缩算法采用 HPACK,而非 SPDY 采用的 DEFLATE

HTTP2.0 与 HTTP1.X 的区别

  1. 头部压缩(header,HTTPx的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。
  2. 二进制帧层(Binary Format,HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多。二进制则不同,只认0和1的组合。基于这种考虑HTTP0的协议解析决定采用二进制格式,实现方便且健壮。HTTP/2性能提升的核心在于二进制的帧层,它是指HTTP的消息怎么在客户端以及服务端如何进行封装及传输。
  3. 多路复用(MultiPlexing,即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个TCP连接上可以有多个请求,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。
  4. 服务端推送(server push,服务器资源更新时,不等客户端发来请求,直接把更新的资源(静态资源)推送到客户端。

HTTP2.0的升级改造

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

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

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

HTTPS

HTTP协议的缺点:

明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些隐私敏感信息,比如:信用卡号、密码等支付信息。

HTTPS协议

HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

HTTP + SSL = HTTPS

HTTP + 加密 + 认证 + 完整性保护 = HTTPS

HTTP和HTTPS主要区别

https对比http,优势一目了然

  1、http协议免费,https协议需要到ca证书费钱

2、http信息明文传输不安全,https信息使用安全性SSL/TLS加密传输。

3、http使用80端口,https使用443端口

4、http无法验证网站安全性,https有CA证书,可验证网站安全性

5、HTTP直接与TCP通信,HTTPS先与SSL通信,SSL再与TCP通信

HTTP、HTTP1.1、HTTP2、HTTPS的区别

HTTPS的缺点

两大缺点:慢,贵

  1. HTTPS协议握手阶段(SSL握手)比较费时,会使页面的加载时间延长近50%,增加10%到20%的耗电;
  2. HTTPS连接缓存不如HTTP高效,SSL通信建立会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响;
  3. SSL证书需要钱,功能越强大的证书费用越高。
  4. SSL证书通常需要绑定IP不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。
  5. HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,
  6. SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。

因此:一般信息均由http发送,敏感需要加密的信息由https发送

网站从http切换到HTTPS实现

     这里需要将页面中所有的链接,例如js,css,图片等等链接都由http改为https。例如:http://www.baidu.com改为https://www.baidu.com

  这里虽然将http切换为了https,还是建议保留http。所以我们在切换的时候可以做http和https的兼容,具体实现方式是,去掉页面链接中的http头部,这样可以自动匹配http头和https头。例如:将http://www.baidu.com改为//www.baidu.com。然后当用户从http的入口进入访问页面时,页面就是http,如果用户是从https的入口进入访问页面,页面即使https的。

附注:

HTTP2.0的多路复用和HTTP1.X中的长连接复用的区别

  1. HTTP/1 一个TCP连接只能发一个HTTP请求,HTTP响应则TCP连接关闭一次每一个请求都要建立一个连接;
  2. HTTP/1.1 长连接,连接可以保持但是http请求不能同时发送
    1. Keep-alive:保持连接,建立TCP连接之后,保持TCP连接,等到前一个请求被响应,然后继续发下一个http请求。
    2. Pipeling:管线化,相当于keep-alive的升华,客户端不必等到第一个请求处理完后,就可以马上发起第二个请求。但是多个请求的处理却不是并行的,依然是一个请求接一个请求的处理,只是在处理第一个请求的时候,客户端就可以发起第二个请求。
  3. HTTP/2多路复用,多个http请求可同时在一个tcp连接上并行发送。某个请求任务耗时严重,不会影响到其它连接的正常执行;

HTTP2.0多路复用有多好?

    1. HTTP 性能优化的关键并不在于高带宽,而是低延迟。TCP 连接会随着时间进行自我「调谐」,起初会限制连接的最大速度,如果数据成功传输,会随着时间的推移提高传输的速度。这种调谐则被称为 TCP 慢启动。由于这种原因,让原本就具有突发性和短时性的 HTTP 连接变的十分低效。
    2. HTTP/2 通过让所有数据流共用同一个连接,可以更有效地使用 TCP 连接,让高带宽也能真正的服务于 HTTP 的性能提升。

服务器推送

服务端推送能把客户端所需要的资源伴随着index.html一起发送到客户端,省去了客户端重复请求的步骤。正因为没有发起请求,建立连接等操作,所以静态资源通过服务端推送的方式可以极大地提升速度。具体如下:

普通的客户端请求过程:

HTTP、HTTP1.1、HTTP2、HTTPS的区别

服务端推送过程:

HTTP、HTTP1.1、HTTP2、HTTPS的区别

SSL与TLS的区别?

 SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议。

  TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议。

SSL是Netscape开发的专门用户保护Web通讯的,目前版本为3.0。最新版本的TLS 1.0是IETF(工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。两者差别极小,可以理解为SSL 3.1,它是写入了RFC的。

参考博客:HTTP1.0HTTP1.1HTTP2.0的区别

MINI类型

最早的HTTP协议中,并没有附加的数据类型信息,所有传送的数据都被客户程序解释为超文本标记语言HTML 文档,而为了支持多媒体数据类型,HTTP协议中就使用了附加在文档之前的MIME数据类型信息来标识数据类型

MIME意为多目Internet邮件扩展,它设计的最初目的是为了在发送电子邮件时附加多媒体数据,让邮件客户程序能根据其类型进行处理。然而当它被HTTP协议支持之后,它的意义就更为显著了。它使得HTTP传输的不仅是普通的文本,而变得丰富多彩。

每个MIME类型由两部分组成,前面是数据的大类别,例如声音audio、图象image等,后面定义具体的种类。

常见的MIME类型:

  超文本标记语言文本 .html,.html text/html

  普通文本 .txt text/plain

  RTF文本 .rtf application/rtf

  GIF图形 .gif image/gif

  JPEG图形 .jpeg,.jpg image/jpeg

  au声音文件 .au audio/basic

  MIDI音乐文件 mid,.midi audio/midi,audio/x-midi

  RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio

  MPEG文件 .mpg,.mpeg video/mpeg

  AVI文件 .avi video/x-msvideo

  GZIP文件 .gz application/x-gzip

  TAR文件 .tar application/x-tar