1、http和https的区别
http: 是互联网上应用最广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准 (tcp),用于从www服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高 效,使网络传输减少。
https: 是以安全为目标的http通道, 简单的讲是http的安全办。即http下加入ssl层,https的 安全基础是ssl,因此加密的详细内容就需要ssl.
https的作用主要可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一 种就是确认网站的真实性;
两者的主要区别:
- https协议需要ca申请证书,一般免费证书较少,因而需要一定费用;
- http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议;
- http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443;
- http的连接很简单,是无状态的;https协议是由ssl+http协议构建的可进行加密传输,身份认证的网络协议,比http协议安全。
http的特点
- 支持客户、服务器模式(c/s模式)
- 简单快速:客户向服务器请求服务时,秩序传送请求方法和路径。请求方法常用的有GET、HEAD、POST。没中方法规定了客户与服务器联系的类型不同。由于http协议简单,是的http服务器的程序规模小,因为通信速度很快。
- 灵活:http允许传输任意类型的数据对象。正在传输的类型有content-type加以标记。
- 无连接:含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
- 无状态:无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信心时它的应答就比较快。
http工作流程
- 建立tcp/ip连接,客户端与服务器通过socket三次握手进行连接
- 客户端向服务端发起HTTP请求(例:POST/login.html http/1.1)
- 客户端发送一空白行,表示客户端请求完毕
- 服务器做出应答,表示对于客户端请求的应答,例如:HTTP、1.1 200 OK
- 服务器向客户端发送应答头信息
- 服务器向客户端发送应答头信息后,也会发送一空白行,表示应答头信息发送完毕,接着就以content-type要求的数据格式发送数据给客户端
- 服务端关闭tcp连接,如果服务器或者客户端增加connection:keep-alive就表示客户端与服务端继续保存连接,在下次请求时可以继续使用这次的连接
https的特点
优点
- 认证用户和服务器,确保数据发送到正确的客户机和服务器;
- 安全性 可防止数据在传输过程中不被窃取,改变,确保数据完整性;同时也一定程度上保护了服务端,使用恶意攻击和伪装数据的成本大大提高。
缺点
- https握手阶段比较费时,会使页面加载时间延长50%,增加10%-20%的耗电;
- 缓存不如http高效,会增加数据开销;
- SSL证书需要钱,功能越强大费用越高;
- SSL证书需要绑定ip,不能在同一个ip上绑定多个域名,ipv4资源支持不了这种消耗
https的工作流程
- 客户使用https的url访问web服务器,要求与web服务器建立SSL连接;
- web服务器收到客户端请求后,会将网站的证书信息(证书中包含了公钥)传送一份给客户端;
- 客户端的浏览器与web服务器开始协商SSL连接的安全等级,也就是信息加密的等级;
- 客户端浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站
- web服务器利用自己的私钥解密出会话密钥
- web服务器利用会话密钥加密与客户端之间的通信
2、HTTP/2 与 HTTP/1.x 的关键区别
HTTP1.x主要缺点
- HTTP/1.0一次只允许在一个TCP连接上发起一个请求,HTTP/1.1使用的流水线技术也只能部分处理请求并发,仍然会存在队列头阻塞问题,因此客户端在需要发起多次请求时,通常会采用建立多连接来减少延迟。
- 单向请求,只能由客户端发起。
- 请求报文与响应报文首部信息冗余量大。
- 数据未压缩,导致数据的传输量大
HTTP/2
二进制分帧
HTTP2.0中所有加强性能的核心是二进制传输,在HTTP1.x中,我们是通过文本的方式传输数据。基于文本的方式传输数据存在很多缺陷,文本的表现形式有多样性,因此要做到健壮性考虑的场景必然有很多,但是二进制则不同,只有0和1的组合,因此选择了二进制传输,实现方便且健壮。
首部压缩
在HTTP2.0中,我们使用了HPACK(HTTP2头部压缩算法)压缩格式对传输的header进行编码,减少了header的大小。并在两端维护了索引表,用于记录出现过的header,后面在传输过程中就可以传输已经记录过的header的键名,对端收到数据后就可以通过键名找到对应的值。
多路复用
在HTTP1.x中,我们经常会使用到雪碧图、使用多个域名等方式来进行优化,都是因为浏览器限制了同一个域名下的请求数量,当页面需要请求很多资源的时候,队头阻塞(Head of line blocking)会导致在达到最大请求时,资源需要等待其他资源请求完成后才能继续发送。
HTTP2.0中,基于二进制分帧层,HTTP2.0可以在共享TCP连接的基础上同时发送请求和响应。HTTP消息被分解为独立的帧,而不破坏消息本身的语义,交错发出去,在另一端根据流标识符和首部将他们重新组装起来。 通过该技术,可以避免HTTP旧版本的队头阻塞问题,极大提高传输性能。
请求优先级
把HTTP消息分为很多独立帧之后,就可以通过优化这些帧的交错和传输顺序进一步优化性能。
服务器推送
HTTP2.0新增的一个强大的新功能,就是服务器可以对一个客户端请求发送多个响应。服务器向客户端推送资源无需客户端明确的请求。服务端根据客户端的请求,提前返回多个响应,推送额外的资源给客户端。
3、http与websocket
WebSocket是HTML5规范提出的一种协议,也是基于TCP协议的;和HTTP协议是并存的两种协议。
WebSocket连接的过程是:
- 客户端发起http请求,经过3次握手后,建立起TCP连接;http请求里存放WebSocket支持的版本号等信息,如:Upgrade、Connection、WebSocket-Version等;
- 服务器收到客户端的握手请求后,同样采用HTTP协议回馈数据;
- 客户端收到连接成功的消息后,开始借助于TCP传输信道进行全双工通信
相同点
- 都是一样基于TCP的,都是可靠性传输协议
区别
- Websocket是一个持久化的协议,http不支持(长连接,循环连接的不算);
- Websocket支持双向通讯(可以让服务器主动向客户端推送消息,客户端也可以主动向服务器发送信息);http只能由客户端发起,一个request对应一个response;