首页
学习
活动
专区
圈层
工具
发布
技术百科首页 >WebSocket >WebSocket握手过程是如何进行的?

WebSocket握手过程是如何进行的?

词条归属:WebSocket

1. 客户端握手请求

WebSocket 握手是一个标准的HTTP GET请求,必须包含以下关键头字段:Upgrade: websocket(表明希望升级协议)、Connection: Upgrade(表明连接将被升级)、Sec-WebSocket-Key(由客户端生成的16字节随机值,经Base64编码后发送,用于防止缓存代理误响应)、Sec-WebSocket-Version: 13(当前唯一广泛支持的协议版本)。此外,Host头是HTTP/1.1的必需字段,Origin头由浏览器自动添加(用于服务端判断跨域合法性)。

2. 服务端握手响应

如果服务端支持WebSocket 协议并同意升级,必须返回状态码101 Switching Protocols,且响应头中必须包含:Upgrade: websocket、Connection: Upgrade、Sec-WebSocket-Accept(由客户端Sec-WebSocket-Key与固定GUID字符串"258EAFA5-E914-47DA-95CA-C5AB0DC85B11"拼接后计算SHA-1哈希,再经Base64编码得出)。服务端不得在响应中包含Sec-WebSocket-Key或重复Sec-WebSocket-Version。如果握手失败,服务端应返回4xx或5xx状态码。

3. 握手失败的常见原因

握手失败通常源于以下原因:客户端发送了除GET外的HTTP方法、请求URI不符合WebSocket URL格式(必须以ws://或wss://开头)、缺少必需头字段或字段值格式错误(如Sec-WebSocket-Key非合法Base64或解码后非16字节)、服务端返回的Sec-WebSocket-Accept计算错误、响应中缺失任一必需头。在企业网络环境中,反向代理或防火墙未正确透传Upgrade和Connection头也会导致握手失败。

相关文章
websocket握手过程,和socket的区别
如果是写后端的,或者服务器的,肯定都知道socket是什么,套接字,其实就是对TCP和UDP协议封装的接口,相当于是一个库,提供很多函数接口API供我们使用。
opencode
2022-12-26
1.1K0
websocket的握手流程
在上面的例子中,除了使用Upgrade头之外,客户端还向服务器端发送了Sec-WebSocket-Key header。这个header包含的是一个 base64 编码的随机字节。server对应的会返回这个key的hash值,并将其设置在Sec-WebSocket-Accept header中。
用户8671053
2021-09-26
1.1K0
[网页五子棋]项目介绍以及websocket的消息推送(轮询操作)、报文格式和握手过程(建立连接过程)
椰椰椰耶
2025-05-27
3360
Tomcat中的WebSocket是如何实现的?
全双工通信:WebSocket允许数据同时在客户端和服务器双向通信,无需像HTTP等待请求和响应的循环
菜菜的后端私房菜
2024-08-12
1K0
tcpip3次握手的通信过程是_tcp协议为什么要三次握手
此过程中: 第一次握手,客户端先发一个SYN请求并附带一个J的值给服务端 第二次握手,服务端收到请求后解堵塞,发送一个SYN请求并附带一个K值,还发送了第一次握手后对客户端的响应包并附带在之前接收到的J值的基础上加上1,即J+1 第三次握手,客户端收到服务端发来的SYN请求和K值后,再发送一个K+1的响应包给服务端 至此,三次握手成功完成,客户端和服务端之间成功建立tcp链接
全栈程序员站长
2022-09-23
3750
点击加载更多
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
领券