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

Node.js环境WebSocket连接成功,但纯JavaScript(script标签)连接报错“An invalid or illegal string was specified”的问题排查

解决浏览器端WebSocket连接的"无效字符串"错误

让我们一步步找出你的问题并修复它:

1. 错误的自定义事件监听逻辑

浏览器原生WebSocket API只支持标准事件:open、close、message、error。你不能直接用addEventListener('send logs', ...)来监听服务器发送的自定义事件名——这类自定义事件的内容是包裹在message事件的返回数据里的,你需要先解析收到的消息,再根据消息内的event字段做针对性处理。

2. 多余参数触发格式错误

你在ws.on('message', function incoming(data) { ... }, 500)里添加了第三个参数500,这在浏览器WebSocket API里是完全无效的。浏览器的onmessage回调不需要额外参数,这个多余值会直接触发参数格式类的报错。

3. Origin设置违反浏览器安全策略

浏览器会自动根据当前页面的域名设置WebSocket请求的Origin头,你不能随意手动指定这个值(这是浏览器同源安全策略的限制)。强行设置不符合规则的Origin值,正是导致你看到An invalid or illegal string was specified错误的核心原因之一。如果服务器要求特定Origin,你需要确保页面是从符合要求的域名加载的,而非手动修改这个选项。


修正后的浏览器端可运行代码

const ws = new WebSocket('<Websocket address>'); // 移除手动设置的origin选项

ws.onopen = function() {
  ws.send(JSON.stringify({"event":"auth","args":["<My authentication Token>"]}));
  ws.send(JSON.stringify({"event":"send logs","args":[null]}));
  console.log('connected');
};

ws.onclose = function() {
  console.log('disconnected');
};

ws.onmessage = function(event) {
  // 解析服务器返回的JSON格式消息
  const data = JSON.parse(event.data);
  console.log('Received raw data:', event.data);
  
  // 针对性处理"send logs"自定义事件
  if (data.event === 'send logs') {
    console.log('Message from server (send logs):', data.args);
  }
};

// 新增错误监听,方便排查连接问题
ws.onerror = function(error) {
  console.error('WebSocket error:', error);
};

内容的提问来源于stack exchange,提问作者DaAdmin217

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 13:28:11