Java WebSocket服务器未收到Sec-Websocket-Key,如何发起连接请求?
如何向Java开发的WebSocket服务器发起正确的WebSocket连接请求?
直接在浏览器地址栏输入服务器IP地址时,浏览器发送的是普通HTTP导航请求,不会包含WebSocket握手所需的Sec-WebSocket-Key等字段。要发起WebSocket连接,需要通过前端代码触发浏览器的WebSocket协议握手流程,具体有两种常用方式:
方式一:通过浏览器开发者控制台临时发起
打开Chrome/Edge的开发者工具(按F12),切换到「Console」标签页,输入以下代码并执行(替换成你的服务器地址):
// 注意:ws对应HTTP服务器,wss对应HTTPS服务器 const ws = new WebSocket('ws://127.0.0.1:5801'); // 连接成功回调 ws.onopen = function() { console.log('WebSocket连接已建立'); ws.send('测试消息'); // 可向服务器发送消息 }; // 接收服务器消息回调 ws.onmessage = function(event) { console.log('收到服务器响应:', event.data); }; // 连接关闭回调 ws.onclose = function() { console.log('WebSocket连接已关闭'); }; // 错误处理回调 ws.onerror = function(error) { console.error('连接出错:', error); };
执行后,浏览器会自动发送符合WebSocket规范的握手请求,包含Upgrade: websocket、Connection: Upgrade、Sec-WebSocket-Key等必填字段。
方式二:编写HTML页面发起连接
创建一个本地HTML文件,写入以下内容,打开该文件即可自动发起WebSocket连接:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>WebSocket测试页面</title> </head> <body> <script> // 初始化WebSocket连接 const socket = new WebSocket('ws://127.0.0.1:5801'); socket.onopen = () => { console.log('WebSocket连接成功'); // 可选:发送初始消息 socket.send('来自客户端的连接请求'); }; socket.onmessage = (event) => { console.log('服务器返回消息:', event.data); // 可在这里处理服务器返回的消息,比如展示到页面 }; socket.onclose = () => { console.log('WebSocket连接已断开'); }; socket.onerror = (err) => { console.error('WebSocket连接异常:', err); }; </script> </body> </html>
关键说明
直接在地址栏访问服务器时,浏览器的请求目标是获取网页资源,属于HTTP导航模式;只有通过WebSocket API创建连接实例,浏览器才会触发WebSocket协议的握手流程,发送符合RFC 6455规范的升级请求,携带所有WebSocket握手必需的字段。
内容的提问来源于stack exchange,提问作者2Amateurs
相关产品推荐
相关产品推荐

