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
相关产品推荐
相关产品推荐

