http1.0、http1.1和http2.0以及https的区别
今天面试被问到http1.0、1.1、2.0的区别,我是一点都不知道,只知道https和htpp的区别,没办法,只能学一下然后记录一下
http1.0
说到常用的http,我们知道浏览器与服务器只保存短暂的连接,每次请求都需要跟服务器建立一个TCP连接,服务器完成请求后立即断开连接,服务器不跟踪也不记录过去的请求。
http1.1
对于http1.0很明显有性能方面的问题,比如解析html文件的时候,发现有其他的资源文件的时候,就会重新去创建连接。这样子一个html文件包含多次请求和响应,每次请求都会创建连接和关闭连接。
http1.1中有长连接可以解决这个问题。http1.1支持在一个TCP连接上传送多个http请求和响应,减少了建立和关闭连接的消耗和延迟,建立一次连接,然后多次请求都可以从这个连接完成。
并且Http1.1还允许客户端不用等待上一次请求结果返回,然后就直接进行下一次请求,但是服务端需要根据接受到请求的顺序依次返回响应结果,以保证客户端能够区分出每次请求的响应内容,这样也能够减少花在请求上的时间。
在http1.0的基础上,增加了更多的请求头和响应头来完善功能:
- 引入了更多的缓存控制策略
- 引入range,允许值请求资源的一部分
- 引入host,实现了在一台WEB服务器上可以在同一个IP地址和端口号上使用不同的主机名来创建多个虚拟站点 (更加安全)
- 添加了其他的请求方法:put、delete、options
http2.0
http2.0与之前的版本比起来,性能有了很大的提升,添加了一些新特性:
- 多路复用
- 二分制分帧
- 首部压缩
- 服务器推送
多路复用
在一个连接中,客户端和浏览器都能同时发送多个请求或者响应,而且可以不用按照顺序一一对应,这样就避免了阻塞。
二分制分帧
帧是通信中最小的单位,http2.0采用二进制格式传输数据,而不是1.0的文本格式,解析起来更加高效
首部压缩
http2.0在客户端和服务器端都使用首部表
来跟踪和存储之前发送的键值对,对于相同的数据,不再通过每次请求和响应发送。首部表
在连接期间一直存在,由客户端和服务器端一起更新维护。比如两个请求,请求一发送了所有的头部字段,请求二只需要发送差异数据,这样减少冗余数据,节约开销。
服务器推送
http2.0允许服务器主动推送数据给客户端。比如在一个页面请求中,可以直接带上页面的需要的其他资源,避免客户端再次创建连接发送请求到服务器获取。这种方式非常适合静态资源
。
总结
- http1.0是短暂的连接,响应结束连接就断开
- http1.1是长连接,如果TCP连接默认不关闭,就可以一直请求数据
虽然可以多次请求数据,但是服务器响应数据的顺序是依次的,只有处理了前一个请求才会去处理下一个请求。
新增了put、delete、options方法,新增了一些响应头和请求头 - http2.0采用二进制而不是文本格式,完全多路复用,不用在乎顺序问题,首部压缩、服务器推送
https
https是超文本传输协议,即HTTP+SSL/TLS。
然后,TLS相当于是SSL的升级版,并且TLS1.2以下的版本都已经废弃,所以我们只需要了解TLS是什么,它是一种加密的算法,主要起的效果是:保证信息的机密性,可用性,完整性,认证性,不可否认性。
对称加密算法
就是加密和解密使用同一密匙。加解密过程:
- 浏览器给服务器发送一个随机数和支持的加密方法列表。
- 服务端发送给浏览器一个随机数和双方都支持的加密方法。
- 然后双发用加密方法将两个随机数混合在一起形成密匙,这就是通信上的加解密的密匙。
不对称加密算法
就是有一对密匙,有公匙和私匙,其中一个密匙加密后的数据,只能用另一个密匙进行解密。加解密过程:
- 浏览器发送一个随机数和一个支持的加密列表。
- 服务器把另一个随机数,加密方法,公匙传给浏览器
- 然后浏览器用公匙将两个随机数加密,生成密匙,这个密匙只能用私匙解开。
非对称加密至少要2048位才能保证安全性,这就导致性能上要比对称加密差很多。
所以,TLS实际上用的是两种混合加密,通过非对称加密获取到对称加密的密匙,交换完成后,然后再使用对称加密。
行百里者半九十