百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

一文了解什么是WebSocket(一文了解什么是总体国家安全)

ccwgpt 2024-10-27 08:48 38 浏览 0 评论

WebSocket 允许我们创建“实时”应用程序,与传统 API 协议相比,该应用程序速度更快且开销更少。

一、WebSocket 是如何工作的

按照传统的定义,WebSocket是一种双工协议,主要用于客户端-服务器通信通道。它本质上是双向的,这意味着通信在客户端与服务器之间来回发生。

使用 WebSocket 开发的连接只要任何参与方中断连接就会持续存在。一旦一方断开连接,另一方将无法进行通信,因为连接会在其前面自动断开。

WebSocket需要HTTP的支持来发起连接。说到它的实用性,当涉及到数据的无缝流和各种不同步流量时,它是现代 Web 应用程序开发的支柱。

二、为什么需要 Web Socket 以及何时应该避免使用 Web Socket

WebSocket 是一种重要的客户端-服务器通信工具,人们需要充分了解其实用性并避免使用其最大潜力的场景。

在以下情况下使用 WebSocket:

? 1.开发实时网络应用程序

WebSocket 最常见的用途是实时应用程序开发,其中它有助于在客户端连续显示数据。当后端服务器不断发回这些数据时,WebSocket 允许在已经打开的连接中不间断地推送或传输这些数据。WebSocket 的使用使此类数据传输变得快速并充分利用了应用程序的性能。

此类 WebSocket 实用程序的一个现实示例是比特币交易网站。在这里,WebSocket 协助部署的后端服务器向客户端发送数据处理。

? 2.创建聊天应用程序

聊天应用程序开发人员在一次性交换和发布/广播消息等操作中向 WebSocket 寻求帮助。由于使用相同的 WebSocket 连接来发送/接收消息,因此通信变得简单快捷。

? 3.正在开发游戏应用程序

在游戏应用程序开发过程中,服务器必须不间断地接收数据,而不要求 UI 刷新。WebSocket 可以在不影响游戏应用程序 UI 的情况下实现这一目标。

既然已经清楚了应该在哪里使用 WebSocket,请不要忘记了解应该避免使用 WebSocket 的情况,让自己远离大量的操作麻烦。

当需要获取旧数据或仅需要一次性处理数据时,不应该使用 WebSocket。在这些情况下,使用 HTTP 协议是明智的选择。

三、WebSocket 与 HTTP

由于 HTTP 和 WebSocket 都用于应用程序通信,因此人们经常感到困惑,并且很难从这两者中选择一个。看一下下面提到的文本,可以更清楚地了解 HTTP 和 WebSocket。

如前所述,WebSocket 是一种框架式双向协议。相反,HTTP 是一个在 TCP 协议之上运行的单向协议。

由于WebSocket协议能够支持连续的数据传输,因此主要用于实时应用程序开发。HTTP 是无状态的,用于开发RESTful和 SOAP 应用程序。Soap仍然可以使用HTTP来实现,但是REST被广泛传播和使用。

在 WebSocket 中,通信发生在两端,这使其成为更快的协议。在 HTTP 中,连接是在一端建立的,这使得它比 WebSocket 有点慢。

WebSocket使用统一的TCP连接,需要一方终止连接。在发生这种情况之前,连接将保持活动状态。HTTP 需要为单独的请求构建不同的连接。请求完成后,连接会自动断开。

四、WebSocket 连接是如何建立的

该过程从WebSocket 握手开始,涉及使用新方案 ws 或 wss。为了快速理解,您可以将它们分别视为 HTTP 和安全 HTTP (HTTPS)。

使用此方案,服务器和客户端应遵循标准 WebSocket 连接协议。WebSocket 连接建立从 HTTP 请求升级开始,该请求具有几个标头,例如 Connection: Upgrade、Upgrade: WebSocket、Sec-WebSocket- Key 等。

以下是建立此连接的方式:

1.请求

连接:升级标头 表示 WebSocket 握手,而Sec-WebSocket-Key具有 Base64 编码的随机值。该值是在每次 WebSocket 握手期间任意生成的。除了上述内容之外,密钥标头也是该请求的一部分。

2.响应

响应标头Sec-WebSocket-Accept具有Sec-WebSocket-Key请求标头中提交的值的热情。这与特定的协议规范相关,并被广泛用于防止误导性信息。换句话说,它增强了 API 安全性并阻止配置不当的服务器在应用程序开发中造成错误。

五、WebSocket协议

WebSocket 协议是一种框架协议,涉及每个数据的各种离散卡盘。它还部署帧类型、数据部分和有效负载长度以确保正常运行。要详细了解 WebSocket 协议,了解其构建模块至关重要。下面提到了最重要的部分。

Fin Bit是 WebSocket 的基本位。当开始连接时它将自动生成。

? RSV1 、RSV2、RSV3 位是为进一步的机会保留的位。

操作码是每个帧的一部分,解释解释特定帧的有效负载数据的过程。一些常见的操作码值为 0x00、0x0、0x02、0x0a、0x08 等。

当一位设置为 1 时, 掩码位激活。

WebSocket 要求对所有有效负载数据使用客户端选择的随机密钥。屏蔽密钥与有效负载数据结合时,有助于 XOR 操作中的有效负载数据共享。这样做对于应用程序API 安全性非常重要,因为屏蔽可以防止缓存误解或缓存中毒。

现在让我们详细了解其关键组成部分:

有效负载长度

这用于 WebSocket 中有效负载数据的总长度编码。当编码数据长度小于126字节时,显示Payload len。一旦有效负载数据长度超过 126 字节,就会使用附加字段来描述有效负载长度。

掩蔽键

客户端发送到服务器的每个帧都用 32 位值进行掩码。当掩码位为 1 时,显示掩码键。如果掩码位为 0,则掩码键为零。

有效载荷数据

各种任意应用数据和扩展数据被称为有效负载数据。客户端和服务器使用此数据进行协商,并用于早期的 WebSocket 握手。

六、结论

WebSocket 支持客户端和服务器之间的双向交互式通信会话,而无需轮询服务器以获得答复,从而提供了比其他协议更高的速度和实际功能。但与所有应用程序一样,使用 WebSocket 需要仔细的编程实践和运行时保护,以防范一组独特的威胁。与传统方法相比,这种 API 深度防御策略将改善对用户和组织的保护。

相关推荐

RACI矩阵:项目管理中的角色与责任分配利器

作者:赵小燕RACI矩阵RACI矩阵是项目管理中的一种重要工具,旨在明确团队在各个任务中的角色和职责。通过将每个角色划分为负责人、最终责任人、咨询人和知情人四种类型,RACI矩阵确保每个人都清楚自己...

在弱矩阵组织中,如何做好项目管理工作?「慕哲制图」

慕哲出品必属精品系列在弱矩阵组织中,如何做好项目管理工作?【慕哲制图】-------------------------------慕哲制图系列0:一图掌握项目、项目集、项目组合、P2、商业分析和NP...

Scrum模式:每日站会(Daily Scrum)

定义每日站会(DailyScrum)是一个Scrum团队在进行Sprint期间的日常会议。这个会议的主要目的是为了应对Sprint计划中的不断变化,确保团队能够有效应对挑战并达成Sprint目标。为...

大家都在谈论的敏捷开发&Scrum,到底是什么?

敏捷开发作为一种开发模式,近年来深受研发团队欢迎,与瀑布式开发相比,敏捷开发更轻量,灵活性更高,在当下多变环境下,越来越多团队选择敏捷开发。什么是敏捷?敏捷是一种在不确定和变化的环境中,通过创造和响应...

敏捷与Scrum是什么?(scrum敏捷开发是什么)

敏捷是一种思维模式和哲学,它描述了敏捷宣言中的一系列原则。另一方面,Scrum是一个框架,规定了实现这种思维方式的角色,事件,工件和规则/指南。换句话说,敏捷是思维方式,Scrum是规定实施敏捷哲学的...

敏捷项目管理与敏捷:Scrum流程图一览

敏捷开发中的Scrum流程通常可以用一个简单的流程图来表示,以便更清晰地展示Scrum框架的各个阶段和活动。以下是一个常见的Scrum流程图示例:这个流程图涵盖了Scrum框架的主要阶段和活动,其中包...

一张图掌握项目生命周期模型及Scrum框架

Mockito 的最佳实践(mock方法)

记得以前面试的时候,面试官问我,平常开发过程中自己会不会测试?我回答当然会呀,自己写的代码怎么不测呢。现在想想我好像误会他的意思了,他应该是想问我关于单元测试,集成测试以及背后相关的知识,然而当时说到...

EffectiveJava-5-枚举和注解(java枚举的作用与好处)

用enum代替int常量1.int枚举:引入枚举前,一般是声明一组具名的int常量,每个常量代表一个类型成员,这种方法叫做int枚举模式。int枚举模式是类型不安全的,例如下面两组常量:性别和动物种...

Maven 干货 全篇共:28232 字。预计阅读时间:110 分钟。建议收藏!

Maven简介Maven这个词可以翻译为“知识的积累”,也可以翻译为“专家”或“内行”。Maven是一个跨平台的项目管理工具。主要服务于基于Java平台的项目构建、依赖管理和项目信息管理。仔...

Java单元测试框架PowerMock学习(java单元测试是什么意思)

前言高德的技术大佬在谈论方法论时说到:“复杂的问题要简单化,简单的问题要深入化。”这句话让我感触颇深,这何尝不是一套编写代码的方法——把一个复杂逻辑拆分为许多简单逻辑,然后把每一个简单逻辑进行深入实现...

Spring框架基础知识-第六节内容(Spring高级话题)

Spring高级话题SpringAware基本概念Spring的依赖注入的最大亮点是你所有的Bean对Spring容器的存在是没有意识的。但是在实际的项目中,你的Bean必须要意识到Spring容器...

Java单元测试浅析(JUnit+Mockito)

作者:京东物流秦彪1.什么是单元测试(1)单元测试环节:测试过程按照阶段划分分为:单元测试、集成测试、系统测试、验收测试等。相关含义如下:1)单元测试:针对计算机程序模块进行输出正确性检验工作...

揭秘Java代码背后的质检双侠:JUnit与Mockito!

你有没有发现,现在我们用的手机App、逛的网站,甚至各种智能设备,功能越来越复杂,但用起来却越来越顺畅,很少遇到那种崩溃、卡顿的闹心事儿?这背后可不是程序员一拍脑袋写完代码就完事儿了!他们需要一套严谨...

单元测试框架哪家强?Junit来帮忙!

大家好,在前面的文章中,给大家介绍了以注解和XML的方式分别实现IOC和依赖注入。并且我们定义了一个测试类,通过测试类来获取到了容器中的Bean,具体的测试类定义如下:@Testpublicvoid...

取消回复欢迎 发表评论: