深入了解Http和https、WebSocket

在这里插入图片描述
前一段时间面试好几家公司面试官都问到了Http和https、WebSocket,之前呢也是了解过一点,面试的时候也就没怎么说清楚,所以今天呢就整理了相关的知识,若有错误的地方还望大家评论区留言。


先说说我自己对http和https的一个理解吧!

http:就是我们常说的超文本传输协议,他在像服务器传输数据的时候没有任何的加密;
比如我们访问一个网站,需要在这个网站输入密码 登陆账号之类的操作那我们的
账号和密码就会发送到网站上的服务器上面,但要是有人在中途截取了我们的信息,那我们
一些比较重要的信息可能就要暴露了,所以未来解决http在传输过程中不加密的问题之后又
增加了一个SSL协议,这个协议简单点就是提供数据安全和完整性的协议 也就是负责网络
连接的加密,比如我们访问了一个https的网站,那我们的电脑就会先和服务器建立一个安全的连接通道然后服务器会先发送一份网站的证书信息到我们的电脑,就相当于告诉我们的电脑,你访问的服务器没有问题,确认了信息之后,我们的服务区就会生成一个枷锁的箱子,一把是电脑的一把是服务器电脑的,然后服务器就会把没有上锁的箱子和钥匙发给我们的电脑,我们把信息放在箱子里面之后,用钥匙锁上然后发给服务器,服务器再用自己的钥匙打开箱子,来保证信息的安全,在这个过程中,纪实箱子被别人拦截了因为没有服务器的钥匙 ,以目前的技术来讲,还是很难打开箱子的,所以一些购物网站,或者是需要https,我们现在登陆的网站基本都是https。


一、Http是什么?

	http呢是一个简单的请求-响应协议,也就是我们常说超文本传输协议它通常运行在TCP之上。它指定了客
户端可能发送给服务器什么样的消息以及得到什么样的响应。

    是用于从WWW服务器传输超文本到本地浏览器的传输协议。它可以使浏览器更加高效,使网络传输减少。它不仅
保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于
图形)等。
1、http的应用场景:

HTTP诞生之初主要是应用于WEB端内容获取,那时候内容还不像现在这样丰富,排版也没那么精美,用户交互的场景几乎没有。对于这种简单的获取网页内容的场景,HTTP表现得还算不错。但随着互联网的发展和WEB2.0的诞生,更多的内容开始被展示(更多的图片文件),排版变得更精美(更多的CSS),更复杂的交互也被引入(更多的jS)。用户打开一个网站首页所加载的数据总量和请求的个数也在不断增加。
今天绝大部分的门户网站首页大小都会超过2M,请求数量可以多达100个。另一个广泛的应用是在移动互联网的客户端APP,不同性质的APP对HTTP的使用差异很大。对于电商类APP,加载首页的请求也可能多达10多个。对于微信这类IM,HTTP请求可能仅限于语音和图片文件的下载,请求出现的频率并不算高。

在这里插入图片描述

2、工作原理:
	HTTP是基于客户/服务器模式,且面向连接的。典型的HTTP事务处理有如下的过程
	(1)客户与服务器建立连接;
	
	(2)客户向服务器提出请求;
	
	(3)服务器接受请求,并根据请求返回相应的文件作为应答;
	
	(4)客户与服务器关闭连接。

    客户与服务器之间的HTTP连接是一种一次性连接,它限制每次连接只处理一个请求,当服务器返回本次
请求的应答后便立即关闭连接,下次请求再重新建立连接。HTTP是一种无状态协议,即服务器不保留与客户交易
时的任何状态。这就大大减轻了服务器记忆负担,从而保持较快的响应速度。HTTP是一种面向对象的协议。允许
传送任意类型的数据对象。它通过数据类型和长度来标识所传送的数据内容和大小,并允许对数据进行压缩传送。
当用户在一个HTML文档中定义了一个超文本链后,浏览器将通过TCP/IP协议与指定的服务器建立连接。

从技术上讲是客户在一个特定的TCP端口(端口号一般为80)上打开一个套接字。如果服务器一直在这个周知的端口上倾听连接,则该连接便会建立起来。然后客户通过该连接发送一个包含请求方法的请求块。

在这里插入图片描述

2、http的优缺点:

优点:

	简单,灵活,易于扩展:因为无太多限制,因为简单可以叫用户自己扩展。
	应用广泛,环境成熟:因为过于简单,普及,因此应用很广泛。因为本身不属于一种语言,因此,就无平台
	,语言界限,因此跨平台性很强。
	无状态,因为没有任何记录。可以减轻服务器的负担,能够更多的cpu和内存用来对外提供服务。因为无状
	态,对服务器无要求,因此可以组成集群。

缺点:

明文不安全。
因为无状态,因此无法做连续多个步骤的操作。例如:加入购物出,结算,支付。每次都需要验证身份信息,
但是无状态所以无法连续。解决办法,就是cookie技术。
性能:“请求 - 应答”模式则加剧了 HTTP 的性能问题,这就是著名的“队头阻塞”(Head-of-line blocking),
当顺序发送的请求序列中的一个请求因为某种原因被阻塞时,在后面排队的所有请求也一并被阻塞,会导致客户
端迟迟收不到数据。为了解决这个问题,就诞生出了一个专门的研究课题“Web 性能优化”,HTTP 官方标准里就有“缓
存”一章(RFC7234),非官方的“花招”就更多了,例如切图、数据内嵌与合并,域名分片、JavaScript“黑科技”

特点:
http的特点:

灵活可扩展:http非常灵活,在报文中没有做过多的限制,只要按照其规则可以自己定义字段,在传输中也不
仅仅限于txt文本格式,也可以传输图片,视频,压缩包等等任意数据。
可靠性:因为http是基于tcp/ip传输的,因为tcp/ip是一个连接传输协议,因此是是一个可靠的传输
。(可靠是相对的,没有网路那一样不可靠)
请求-应答:http是一个使用请求-应答通信模式。是一个一发,一收的有来有去的的协议。
无状态:是一个无状态协议。(无状态:就是指不记录任何记录,每次都是建立链接,发送数据接收数据)。
应用层协议:是一个万能的应用层协议。不在意性能http可以传输任何东西的一个协议,没有太多局限性,不相
其他协议只局限在一小部分。例如 FTP 只能传输文件、SMTP 只能发送邮件、SSH 只能远程登录等,在通用的数
据传输方面“完全不能打”。
其他:除了以上的五大特点,其实 HTTP 协议还可以列出非常多的特点,例如传输的实体数据可缓存可压缩、
可分段获取数据、支持身份认证、支持国际化语言等。但这些并不能算是 HTTP 的基本特点,因为这都是由第一
个“灵活可扩展”的特点所衍生出来的。

在这里插入图片描述

二、Https是什么?

HTTPS :是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加入SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面。

升级后https有何不同:
	HTTPS 协议是由 HTTP 加上 TLS/SSL 协议构建的可进行加密传输、身份认证的网络协议,主要通
过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。设计
目标主要有三个。
(1)数据保密性:保证数据内容在传输的过程中不会被第三方查看。就像快递员传递包裹一样,都进行
了封装,别人无法获知里面装了什么  。
(2)数据完整性:及时发现被第三方篡改的传输内容。就像快递员虽然不知道包裹里装了什么东西,
但他有可能中途掉包,数据完整性就是指如果被掉包,我们能轻松发现并拒收  。
(3)身份校验安全性:保证数据到达用户期望的目的地。就像我们邮寄包裹时,虽然是一个封装好的未
掉包的包裹,但必须确定这个包裹不会送错地方,通过身份校验来确保送对了地方   。
双向的身份认证:
客户端和服务端在传输数据之前,会通过基于X.509证书对双方进行身份认证 。

1.客户端发起 SSL 握手消息给服务端要求连接。
2.服务端将证书发送给客户端。
3.客户端检查服务端证书,确认是否由自己信任的证书签发机构签发。 如果不是,将是否继续通讯的决定
权交给用户选择 ( 注意,这里将是一个安全缺陷 )。如果检查无误或者用户选择继续,则客户端认可服务
端的身份。
4.服务端要求客户端发送证书,并检查是否通过验证。失败则关闭连接,认证成功则从客户端证书中获得
客户端的公钥,一般为1024位或者 2048位。到此,服务器客户端双方的身份认证结束,双方确保身份
都是真实可靠的。
防止重放攻击
SSL使用序列号来保护通讯方免受报文重放攻击。这个序列号被加密后作为数据包的负载。在整个SSL握
手中,都有一个唯一的随机数来标记SSL握手。 这样防止了攻击者嗅探整个登录过程,获取到加密的登录
数据之后,不对数据进行解密, 而直接重传登录数据包的攻击手法。

可以看到,鉴于电子商务等安全上的需求,HTTPS对比HTTP 协议,在安全方面已经取得了极大的增强。
总结来说,HTTPS的改进点在于创造性的使用了非对称加密算法,在不安全的网路上,安全的传输了用
来进行非对称加密的密钥,综合利用了非对称加密的安全性和对称加密的快速性。
https与HTTP原理区别

HTTPS 主要由两部分组成:HTTP + SSL / TLS,也就是在 HTTP 上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过 TLS 进行加密,所以传输的数据都是加密后的数据。

HTTP 原理

① 客户端的浏览器首先要通过网络与服务器建立连接,该连接是通过TCP 来完成的,一般 TCP 连接的端
口号是80。 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)
协议版本号,后边是 MIME 信息包括请求修饰符、客户机信息和许可内容 。

② 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功
或错误的代码,后边是 MIME 信息包括服务器信息、实体信息和可能的内容 。

HTTPS 原理

① 客户端将它所支持的算法列表和一个用作产生密钥的随机数发送给服务器;

② 服务器从算法列表中选择一种加密算法,并将它和一份包含服务器公用密钥的证书发送给客户端;
该证书还包含了用于认证目的的服务器标识,服务器同时还提供了一个用作产生密钥的随机数;

③ 客户端对服务器的证书进行验证(有关验证证书,可以参考数字签名),并抽取服务器的公用密钥;
然后,再产生一个称作 pre_master_secret 的随机密码串,并使用服务器的公用密钥对其进行加密并将加
密后的信息发送给服务器;

④ 客户端与服务器端根据 pre_master_secret 以及客户端与服务器的随机数值独立计算出加密和 MAC
密钥;

⑤ 客户端将所有握手消息的 MAC 值发送给服务器;

⑥ 服务器将所有握手消息的 MAC 值发送给客户端。
https的优缺点:

优点

1、使用 HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;

2、HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 HTTP 协议安
全,可防止数据在传输过程中被窃取、改变,确保数据的完整性。

HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。

缺点

1、相同网络环境下,HTTPS 协议会使页面的加载时间延长近 50%,增加 10%到 20%的耗电。
此外,HTTPS 协议还会影响缓存,增加数据开销和功耗。

2、HTTPS 协议的安全是有范围的,在黑客攻击、拒绝服务攻击和服务器劫持等方面几乎起不到什么作用 

3、最关键的是,SSL 证书的信用链体系并不安全。特别是在某些国家可以控制 CA 根证书的情况下,中
间人攻击一样可行。

3、成本增加。部署 HTTPS 后,因为 HTTPS 协议的工作要增加额外的计算资源消耗,例如 SSL 协议
加密算法和 SSL 交互次数将占用一定的计算资源和服务器成本。在大规模用户访问应用的场景下,服务
器需要频繁地做加密和解密操作,几乎每一个字节都需要做加解密,这就产生了服务器成本。随着云
计算技术的发展,数据中心部署的服务器使用成本在规模增加后逐步下降,相对于用户访问的安全提升,
其投入成本已经下降到可接受程度。

在这里插入图片描述

三、WebSocket是什么?

WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据

交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要

完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。WebSocket 是独立的、

创建在 TCP 上的协议。

很多网站为了实现推送技术,所用的技术都是轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。
而比较新的技术去做轮询的效果是Comet。这种技术虽然可以双向通信,但依然需要反复发出请求。而且在Comet中,普遍采用的长链接,也会消耗服务器资源。
在这种情况下,HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。

WebSocket的使用场景 以及优点
社交聊天、弹幕、多玩家游戏、协同编辑、股票基金实时报价、体育实况更新、视频会议/聊天、基
于位置的应用、在线教育、智能家居等需要高实时的场景

优点

1、更好的二进制支持。Websocket定义了二进制帧,相对HTTP,可以更轻松地处理二进制内容。
2、较少的控制开销。在连接创建后,服务器和客户端之间交换数据时,用于协议控制的数据包头部相对
较小。
3、可以支持扩展。Websocket定义了扩展,用户可以扩展协议、实现部分自定义的子协议。如部分浏览
器支持压缩等。
4、更好的压缩效果。相对于HTTP压缩,Websocket在适当的扩展支持下,可以沿用之前内容的上下文,
在传递类似的数据时,可以显著地提高压缩率。
5、保持连接状态。与HTTP不同的是,Websocket需要先创建连接,这就使得其成为一种有状态的协议,
之后通信时可以省略部分状态信息。而HTTP请求可能需要在每个请求都携带状态信息(如身份认证等)
  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值