面试被问到。自己对于http到http2之间的升级,底层原理,回答的不是特别好。现在进一步的学习和了解一下:
https,http,http2三者的含义及区别
MDN上对此的所有解释:
HTTP (The HyperText Transfer Protocol,超文本传输协议) 是用于在 Web 上传输超媒体文件的底层 协议 ,最典型场景的是在浏览器和服务器之间传递数据,以供人们浏览。现行的 HTTP 标准的版本是 HTTP/2。
“http://” 称为 “schema”,是 URI 的组成部分,一般位于网络地址的开头。以“https://developer.mozilla.org”为例,该地址说明请求文档时使用 HTTP 协议;这里的 https 代指 HTTP 协议的安全版本,即 SSL (或称 TLS)
HTTP 是基于文本的(所有的通信都以纯文本的形式进行) 以及无状态的 (当前通信状态不会发现以前的通信状态),该特性极大方便了在www上浏览网页的人。除此之外,HTTP也可以用于构建服务器之间交互的 REST web 服务,以及使得网站内容更加动态化的 AJAX 请求。
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协议,本身就是加密的
HTTP2大大提升了性能,我们需要了解的就是HTTP2提升性能的背后的原理。通过原理我们可以看到,就是在基础知识基础技术上的优化,在七层协议上优化,把之前不敢想不敢变的底层进行变化。HTTP3也是延续同样的思路,将传输层的TCP协议更换为UDP协议,并且自制Quic协议作为控制协议,UDP和Quic组合减少了TCP协议很多不必要的复杂性,因而进一步提升了效率。
HTTPS
过HTTPS是身披SSL外壳的HTTP。HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。
PS:TLS是传输层加密协议,前身是SSL协议,由网景公司1995年发布,有时候两者不区分。
————————————————
版权声明:本文为CSDN博主「会飞的狗~」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xiaoming100001/article/details/81109617
https://www.jianshu.com/p/e65e10a03766