You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 23:45:59