WebSocket的参数粗略解释

一、握手阶段(HTTP 升级请求)

1. 请求行参数

格式GET /{path}?{query} HTTP/1.1
/{path}
服务端监听路径,用于指定 WebSocket 服务端点(如 /chat)。支持路径参数动态匹配(如 /room/123)。
?{query}
附加查询参数,常用于身份验证(如 token=abc)或传递初始化数据。需手动解析键值对。

2. 必需请求头
请求头作用与格式示例
Upgrade固定为 websocket,声明协议升级。Upgrade: websocket
Connection固定为 Upgrade,表示需保持长连接。Connection: Upgrade
Sec-WebSocket-Key客户端生成的 16 字节随机数 Base64 编码,用于安全验证。服务端需将其与 GUID 拼接后计算 SHA-1 哈希并返回 Sec-WebSocket-AcceptSec-WebSocket-Key: dGhlIHNhbXBsZQ==
Sec-WebSocket-Version固定为 13,表示使用 WebSocket 协议第 13 版。Sec-WebSocket-Version: 13
3. 可选请求头
请求头作用与格式示例
Origin请求来源域名,用于跨域策略验证。若为空或未授权,服务端可拒绝连接。Origin: http://client-domain.com
Sec-WebSocket-Protocol客户端支持的子协议列表(如 chatbinary),服务端需选择其一返回。Sec-WebSocket-Protocol: chat, video
Cookie传递 HTTP 会话 Cookie,用于身份关联(需服务端配置支持)。Cookie: sessionId=abc123
Authorization身份验证凭证(如 Bearer Token),替代 URL 参数传递敏感信息。Authorization: Bearer eyJhbGci...

二、客户端构造函数参数(WebSocket API)

1. url 参数

格式ws://host:port/path?querywss://host:port/path?query
ws vs wssws 为明文协议(默认端口 80),wss 为加密协议(默认端口 443)。
动态路径:支持路径参数(如 /user/123),服务端可通过解析路径实现资源隔离。

2. protocols 参数

作用:声明客户端支持的子协议列表(字符串或数组),服务端选择其一返回 Sec-WebSocket-Protocol 响应头。

// 示例:声明两种子协议
const socket = new WebSocket("ws://example.com", ["chat-v1", "binary-v2"]);

三、数据传输阶段参数(数据帧格式)

WebSocket 数据帧由以下字段构成,用于控制数据传输:

字段名长度(位)作用与取值
FIN1标识是否为消息的最后一个分片(1=结束,0=还有后续帧)。
RSV1-33保留位,需为 0(除非协商了扩展)。
Opcode4定义数据类型:
0x1 文本帧
0x2 二进制帧
0x8 关闭帧
0x9 Ping 帧等。
Mask1客户端到服务端的数据必须掩码(1=启用,0=禁用)。服务端到客户端禁止掩码。
Payload Length7/16/64负载长度:
• 0-125:直接表示长度
• 126:后 2 字节为长度
• 127:后 8 字节为长度。
Masking-Key32掩码密钥(仅当 Mask=1 时存在),用于异或运算解码负载数据。
Payload Data可变实际传输的数据(如 JSON、二进制流)。

四、关键验证与处理逻辑

  1. 安全握手验证
    服务端需计算 Sec-WebSocket-Accept

    key = client_key + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
    accept = base64(sha1(key))
    

    若验证失败,返回 401 Unauthorized 并关闭连接。

  2. 跨域处理
    服务端需在响应头添加 Access-Control-Allow-Origin,或通过拦截器动态验证 Origin 头。

  3. 子协议协商
    服务端从客户端 Sec-WebSocket-Protocol 中选择支持的协议,返回给客户端以实现多逻辑分支处理。


五、常见问题与调试

连接失败:检查端口是否开放、路径是否匹配、跨域策略是否允许。
数据解析错误:验证 Opcode 类型与负载格式是否一致,或检查掩码解码逻辑。
性能优化:使用二进制帧(Opcode=0x2)传输结构化数据(如 Protobuf),减少带宽占用。

通过合理配置上述参数,可构建高效、安全的实时通信系统。具体实现可参考各语言库(如 Node.js 的 ws 或 Java 的 Tyrus)的文档。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/33583.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

系统思考:客户价值

“真正的市场竞争,不是比谁更能制造产品,而是比谁更能创造价值。” ——杰夫贝索斯 在组织辅导中,我经常问团队一个问题:“我们的客户是谁?”大多数人的第一反应是——“支付费用的就是客户。” 这在过去的市场扩张阶…

Centos7网卡 Failed to start LSB: Bring up/down networking

Centos7网卡 Failed to start LSB: Bring up/down networking 检查虚拟网络编辑器配置无误编辑ifcfg-ens33文件 Centos7重启网卡服务失败错误如下 给Centos7系统使用NAT模式配置静态IP地址: 检查虚拟网络编辑器配置无误 编辑ifcfg-ens33文件 vim /etc/sysconfig/ne…

第一个vue项目

项目目录 启动vue项目 npm run serve 1.vue.config.js文件 (CLI通过vue-cli-serve启动项目,解析配置配置文件vue-condig-js) // vue.config.js //引入path板块,这是Node.js的一个内置模块,用于处理文件路径,这里引用…

【Qt】QWidget属性介绍

🏠个人主页:Yui_ 🍑操作环境:Qt Creator 🚀所属专栏:Qt 文章目录 前言1. enabled属性2.geometry属性2.1 改变控件位置2.2 女神表白程序2.3 知识补充——window frame 3. windowsTitle属性4. windowIcon属性…

嵌入式八股ARM篇

前言 ARM篇主要介绍一下寄存器和中断机制,至于汇编这一块…还请大家感兴趣自行学习 1.寄存器 R0 - R3 R4 - R11 寄存器 R0 - R3一般用作函数传参 R4 - R11用来保存程序运算的中间结果或函数的局部变量 在函数调用过程中 注意在发生异常的时候 cortex-M0架构会自动将R0-R3压入…

nerfstudio以及相关使用记录(长期更新)

NeRFStudio 是NeRF/3DGS研究和开发的集成平台。 提供了一个用户友好的界面和一系列工具,帮助研究人员和开发者更高效地构建、训练和评估 NeRF 模型。以前使用的时候用完就丢一边了,没有注意记录,现在有一个工程调用了nerfstudio,部…

《论分布式系统架构设计及其应用》架构师论文

【摘要】 2022年3月,我参与了某金融科技公司“智能风控云平台”项目的研发工作,担任系统架构师职务,负责分布式系统架构设计与核心技术选型。该平台旨在为银行、保险等金融机构提供实时风险评估、反欺诈及数据服务,需支撑每秒十万…

黄金还能再涨吗?

写在前面:【财富自由计算助手】已上线,快算算你的财富自由要多少 逻辑比事实更真实。 最近,黄金涨得妈都不认。 连菜市场大妈都在讨论,要不要囤点黄金。 2022 年初,俄乌冲突升级为全面战争以来,黄金价格…

AutoDev × MCP 双向赋能:AutoDev 即 MCP 服务,MCP 服务即 AutoDev 指令

在 Agentic Coding 这一话题下,工具使用(Tool Use/Function calling)是一个非常有意思的话题。完成一个软件开发任务,需要使用到大量的工具, 除去在 IDE 及其插件生态本身提供的功能外,还会使用到大量的外部…

DataWhale 大语言模型 - GPT和DeepSeek模型介绍

本课程围绕中国人民大学高瓴人工智能学院赵鑫教授团队出品的《大语言模型》书籍展开,覆盖大语言模型训练与使用的全流程,从预训练到微调与对齐,从使用技术到评测应用,帮助学员全面掌握大语言模型的核心技术。并且,课程…

安装 oepn-webui报错 Cannot connect to host api.openai.com:443 ssl

一、发现问题 安装 open-webui 的报错 api.openai.com 不通,因为 open-webui 最新版和以前的不一样了,所以网上的很多资料都用不了,经过一番摸索,找到解决办法 另外如果发现浏览器打开之后白屏,则是因为后台正在配置…

【6】树状数组学习笔记

前言 树状数组是我学的第一个高级数据结构,属于 log ⁡ \log log 级数据结构。 其实现在一般不会单独考察数据结构,主要是其在其他算法(如贪心,DP)中起到优化作用。 长文警告:本文一共 995 995 995 行…

研发团队协作软件推荐:18款工具对比

本文将深入对比18款主流研发团队协作软件:PingCode、 Worktile、钉钉、飞书、企业微信、Teambition、蓝湖、石墨文档、明道等。 在当今信息化时代,研发团队协作软件已经成为企业提高工作效率、改善团队沟通与管理的重要工具。借助这些软件,企…

Java8的新特性

1.Lambda表达式和函数式接口 Lambda的基础:函数式接口 Java 8与之前版本的区别: Java 7及之前:接口中只能包含抽象方法,无法通过函数式接口简洁地表示Lambda表达式。Java 8:通过FunctionalInterface注解,明…

数据库管理-第302期 国产类RAC架构数据库网络连接方式(20250314)

数据库管理302期 2025-03-14 数据库管理-第302期 国产类RAC架构数据库网络连接方式(20250314)1 Oracle RAC2 DMDSC3 YAC4 KES RAC总结 数据库管理-第302期 国产类RAC架构数据库网络连接方式(20250314) 作者:胖头鱼的鱼…

Spring框架详解(IOC容器-上)

IOC( Inversion of Control,控制反转)和DI(dependency injection)是Spring框架的核心特性,也是Spring框架的基础。 Spring框架作为一个IOC容器,负责加载、创建和管理Spring Bean。 接下来介绍…

架构学习第八周--Kubernetes博客搭建

目录 一、整体架构 二、部署MySQL主从 三、部署Redis哨兵 四、部署WordPress 五、注意事项 一、整体架构 本项目为在一主三从的Kubernetes集群上部署WordPress博客。因为WordPress部分容器版本自行集成Apache和PHP服务,因此在Kubernetes上部署WordPress只需提供…

【品铂科技】在高精度定位行业内的口碑怎么样?

1. ‌技术实力与行业认可‌ 公司自主研发的ABELL无线实时定位系统在复杂环境中(如工业、司法监狱等)展现出厘米级(5-10厘米)高精度定位能力,客户反馈系统稳定性强、抗干扰能力突出,成为行业技术标杆‌。参…

长度最小的子数组-滑动窗口解法

本来觉得自己双指针学的还可以了,于是今天直接刷了一道滑动窗口题,没想到还是被坑绊倒了两次。这次我想记录在博客里,不仅可以防止我以后重蹈覆辙,兴许也还可以帮助到其他人。 题目来自力扣:209. 长度最小的子数组 - …

深入理解Linux网络随笔(七):容器网络虚拟化--Veth设备对

深入理解Linux网络随笔(七):容器网络虚拟化 微服务架构中服务被拆分成多个独立的容器,docker网络虚拟化的核心技术为:Veth设备对、Network Namespace、Bridg。 Veth设备对 veth设备是一种 成对 出现的虚拟网络接口&…