答:http2相对于http 主要做的优化有 多路复用、服务器推送、头信息压缩、二进制协议等,HTTPS是身披SSL外壳的HTTP
HTTP特点:
无状态:协议对客户端没有状态存储,对事物处理没有“记忆”能力,比如访问一个网站需要反复进行登录操作 无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要耗费不必要的时间和流量。
基于请求和响应:基本的特性,由客户端发起请求,服务端响应 简单快速、灵活 通信使用明文、请求和响应不会对通信方进行确认、无法保护数据的完整性。可以通过抓包工具,观察抓到的数据包文件,都是以明文显示的。这样的数据是不安全的。 针对无状态我们可以使用的方式有:
针对无状态的一些解决策略:
比如执行一次登陆操作,在30分钟内所有的请求都不需要再次登陆。
-
通过Cookie/Session技术
-
HTTP/1.1持久连接(HTTP keep-alive)方法,只要任意一端没有明确提出断开连接,则保持TCP连接状态,在请求首部字段中的Connection: keep-alive即为表明使用了持久连接
GOOGLE公司开发Chrome浏览器,并同时开发了SPDY协议,并且利用Chrome浏览器的占有率,将自家协议推为标准。在2015年,互联网标准化组织推出了以SPDY协议为蓝本的HTTP2协议。
HTTP2
http2相对于http 主要做的优化有 多路复用、服务器推送、头信息压缩、二进制协议等
HTTP2,传输的不再是文本,而是二进制流。文本的好处是人可以阅读,二进制流的好处是减少了文本带来的二义性,便于机器阅读。但是同时,HTTP2对于HTTP1.1是兼容的。 改为二进制传输后,带来了哪些好处呢?
首先是传输虚拟为流,类似于HTTP1中的大数据传输,将数据分为帧传输。这样做可以使用更高效socket传输方式。让我们回忆一下,Unix网络编程中有五种IO模型:
-
BlockingIO,阻塞IO
-
NoneBLockingIO, 非阻塞IO
-
IO multiplexing, IO多路复用
-
signal driven IO, 信号驱动IO
-
asynchronous IO,异步IO 在HTTP1中,HTTP请求只能一条完整发送过去后才能发送另外一条,所以优化手段就是用多个线程。而HTTP使用虚拟流,就可以使用IO多路复用的方式来高效通信。这是HTTP2为了优化效率比较根本性的变化
多路复用:通过单一的HTTP/2连接请求发起多重的请求-响应消息,多个请求stream共享一个TCP连接,实现多留并行而不是依赖建立多个TCP连接。
其次,压缩。除了采用高效的传输方式,将信息压缩小,也是一个优化手段。HTTP2中最大的优化就是头部压缩,这里的头压缩不是采用传统的压缩算法,而是经过统计,头部字段很多都是固定的并且很常用,头部很多时候占有几百上千个字节,每次传输都要带着庞大的头部。因此采用了“HPACK”算法,在客户端服务端建立字典,客户端头部传递的是头部编码,服务端收到后根据编码解析出头部。并且传递的时候会再用哈弗曼编码将头部整数字符串再进行一次编码,达到一个较高的压缩率。
HTTP2底层默认使用TLS协议,本身就是加密的
HTTPS
过HTTPS是身披SSL外壳的HTTP。HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。
PS:TLS是传输层加密协议,前身是SSL协议,由网景公司1995年发布,有时候两者不区分。