首页 > 解决方案 > extraHeaders 在 socket.io-client 中不起作用

问题描述

嗨,我的代码在 nodejs 中看起来像这样,它可以工作!

但是当我尝试在 nwjs 应用程序中使用完全相同的代码时,它没有!因为当我嗅探并看到它认为它在 Web 浏览器下运行并且它尝试使用 nwjs 的 chromium 浏览器的本机功能。

function connecttest(domain)
{
socket = require('socket.io-client')('https://ws.'+domain.replace('www.').replace('m.'),{
  forceNode:true,
  transports: ['websocket'],
  extraHeaders: {
      'Origin': 'https://www.'+domain.replace('www.').replace('m.')
  },
  transportOptions: {
    polling: {
      extraHeaders: {
        'Origin': 'https://www.'+domain.replace('www.').replace('m.')
      }
    }
  }
});
socket.on('connect',  function(socket){
    console.log("ok");
socket.emit('query', {"body":{"siteId":"9","source":1,"lang":"tr"},"action":"site.session","frontEndId":0,"token":null});
socket.on('response', function(data){
console.log(data);
});

});
}

提琴手嗅

如您所见,它无法设置正确的来源标头

但

但它在普通的nodejs脚本下工作

标签: node.jssocket.ionwjs

解决方案


也许它是你的transports: ['websocket']。看这里,在官方文档中:

带有额外的标头

这仅polling在启用传输时才有效(这是默认设置)。websocket用作传输时不会附加自定义标头 。发生这种情况是因为 WebSocket 握手不支持自定义标头。(有关背景,请参阅 WebSocket 协议 RFC


推荐阅读