做为一个前端,在 2018 年你确定听过或者已经使用了 HTTPS 和 HTTP 2.0,若是你还没了解过的话,那我让我带你一探究竟吧~前端
超文本传输协议 -- HTTP,是被普遍使用的用于 Web 浏览器和服务器之间通讯的一个协议,它是无状态协议,不会在请求与请求之间保存状态和数据,一般基于 TCP/IP 层。算法
HTTP 从一开始的 0.9 版本,发展到 1.0/1.1 版本,其中经历了缓存处理的改进、method 的增长和长链接的支持等等。HTTP 1.x 版本已经被使用超过了 20 年,直至今天还仍然被普遍采用。可是,随着互联网的飞速发展,这个版本存在着一些问题:浏览器
安全问题首当其冲,在 1994 年的时候,为传输安全保驾护航的 HTTPS 诞生了。缓存
HTTPS (HTTP over SSL/TLS),严格地讲,并非一个单独的协议,而是对工做在一加密链接(TLS 或 SSL)上的常规 HTTP 协议的称呼。HTTP 先与 SSL 通信,再有 SSL 和 TCP 通信。安全
HTTPS = HTTP + 加密 + 认证 + 完整性保护服务器
前面说到 HTTPS 是 over SSL 的,那么也就是说通过了 SSL 这一加密处理方式进行了通讯过程的加密。并发
HTTPS 的加密包括了对称与非对称加密。因为对称加密,秘钥容易被泄露,而非对称加密解密的过程耗时又长,因此索性把这二者结合,利用非对称加密来加密对称加密的秘钥,即利用了非对称加密安全性高的特色,又利用了对称加密速度快,效率高的好处。也就是所谓的混合加密。tcp
非对称加密加密
对称加密spa
如此一来,HTTPS 便解决了安全问题:
PS: 为何 12306 改版之前,证书那块会显示一个红叉?
解决完安全问题,咱们来看看速度与延迟问题是如何被解决的。
2012 年,Google 提出 SPDY,为 HTTP 2.0 的诞生奠基了一个十分扎实的基础,(HTTP 2.0 的主要设计思想源自于 SPDY)它提出:
HTTP 1.x 在一条 TCP 链接上,多个请求只能串行执行。而 SPDY 使多个请求 stream 共享一个 tcp 链接的方式,作到了同时响应多个请求,解决了队头阻塞的问题。
控制多路复用的请求优先级(例如设置 CSS 的优先级比图片高)
顾名思义,对 header 进行压缩。HTTP1.x 的 header 不少时候都是重复多余的。选择合适的压缩算法能够减少包的大小和数量。SPDY 对 header 的压缩率能够达到 80% 以上,低带宽环境下效果很大,对解决慢启动问题也有帮助。
服务端可以更快的把资源推送给客户端。
在 SPDY 的基础之上,HTTP 2.0 诞生了,为了给 HTTP 2.0 铺路,Google 甚至在后期中止对 SPDY 的支持。HTTP 2.0 能够说是 SPDY 的升级版,看看如下特性你就知道了:
HTTP 2.0 让每一个 request 对应一个 stream 并分配一个 id,经过一个链接多 stream 的方式,每一个 stream 的 frame 能够随机的混杂在一块儿,并发响应。
HTTP 2.0 与 SPDY 不一样的地方
讲了这么多,但愿能加强你对 HTTPS 和 HTTP 2.0 的了解。若有错误,恳请斧正!