http1.0~2.0的区别和https实现原理

一、http1和http2的区别
1.1 http1.x

有线程阻塞的缺陷,在同一时间,同一域名的请求有一定数量限制,当超过限制数目的请求时,会被阻塞。

  • http1.0(短连接)

缺陷:浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接(tcp连接的新建成本很高,因为需要客户端与服务器的三次握手),服务器完成请求处理后立即断开TCP连接,服务器也不跟踪每个客户和记录过去的请求。
解决方法:添加头信息 —— 非标准的Connection字段Connection:keep-alive

  • http1.1(持久连接)
  • 引入了持久连接:即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection:keep-alive(对于同一个域名,大多数浏览器允许同时建立6个持久连接);
  • 管道机制: 在同一个TCP连接里面,客户端可以同时发送多个请求;
  • 分块传输编码: 服务端没产生一块数据,就发送一块,采用“流模式”来取代了“缓存模式”;
  • 新增请求方式:
    PUT:请求服务器存储一个资源;
    DELETE:请求服务器删除标识的资源;
    OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求;
    TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断;
    CONNECT:保留将来使用。

缺点: 虽然允许复用TCP连接,但是同一个TCP连接里面,所有的数据通信是按次序进行的。服务器只有处理完一个请求,才会接着处理下一个请求;如果前面处理的的特别慢,后面就会有许多请求排队等着;会造成“队头堵塞”的情况。
解决方式:一是减少请求,二是同时多开持久连接。

1.2 http2.0
  • 采用二进制格式而非文本格式;
  • 完全多路复用,而非有序并阻塞的,只需一个TCP连接即可实现并行,解决了线头阻塞的问题,这也是与http1最重要的区别;
  • 使用报头压缩,降低开销;
  • 服务推送。
  • 二进制协议
    HTTP/1.1 版的头信息肯定是文本(ASCII编码),数据体可以是文本,也可以是二进制。HTTP/2 则是一个彻底的二进制协议,头信息和数据体都是二进制,并且统称为”帧”:头信息帧和数据帧。
    二进制协议解析起来更高效、“线上”更紧凑,更重要的是错误更少。
  • 完全多路复用
    HTTP/2 复用TCP连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应,这样就避免了”队头堵塞”。
  • 报头压缩
    HTTP 协议是没有状态,导致每次请求都必须附上所有信息。所以,请求的很多头字段都是重复的,比如Cookie,一样的内容每次请求都必须附带,这会浪费很多带宽,也影响速度。
    对于相同的头部,不必再通过请求发送,只需发送一次;
    HTTP/2 对这一点做了优化,引入了头信息压缩机制;
    一方面,头信息使用gzip或compress压缩后再发送;
    另一方面,客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,产生一个索引号,之后就不发送同样字段了,只需发送索引号。
  • 服务器推送
    HTTP协议通常承载于TCP协议之上,在HTTP和TCP之间添加一个安全协议层(SSL或TSL),这个时候,就成了我们常说的HTTPS.
二、https和http有什么区别

http是一种客户端和服务端无状态、明文传输的超文本传输协议,也因此使浏览器更加高效,是网络传输减少。
https是以安全为目标的HTTP通道,在HTTP下加入SSL层,使传输内容加密,身份验证,保证数据完整性。

主要区别:

  • https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用;
  • http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议;
  • http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443;
  • http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
三、https的实现原理

HTTPS实现过程简述:

客户端发起 HTTPS 请求,服务端返回证书,客户端对证书进行验证,验证通过后本地生成用于改造对称加密算法的随机数,通过证书中的公钥对随机数进行加密传输到服务端,服务端接收后通过私钥解密得到随机数,之后的数据交互通过对称加密算法进行加解密。

https实现原理:

  1. 浏览器把自己支持的加密规则(加密算法和哈希算法)发送给端口为443的服务器;
  1. 服务器从浏览器发送过来的加密规则中选用,将数字证书(证书包括有网站地址、加密公钥、证书有效期及颁发机构等信息)返回给浏览器;
  1. 浏览器验证数字证书的合法性:
  • 浏览器验证证书的合法性,如果合法的话,取出公钥并用公钥解密得到证书的签名和内容;
  • 再验证证书签名的合法性;
  • 验证记录的网址是否与当前网址一致,这些都通过时,浏览器才可以安全地使用证书中的网站公钥。
  1. 浏览器接着生成一串随机数密码(R),然后用公钥进行加密<这块走得是非对称加密>;用约定好的hash算法生成握手消息的hash值,然后用密码对消息进行加密发送给服务器<这块走得是对称加密>
  1. 服务器用本地的私钥取出R,并以R为密钥对网页内容进行加密,再传输给浏览器;
  1. 浏览器以R为密钥,使用之前约定好的解密算法来获取网页内容。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值