为什么 socket.io 弄乱了我的 ajax headers?

Why socket.io is messing up my ajax headers?

我在 ajax 请求中使用自定义 headers:

$.ajaxSetup({
                beforeSend: function (xhr)
                {
                    xhr.setRequestHeader("Authorization",  'Bearer ' + token);
                    xhr.setRequestHeader("Accept",  'application/json');
                }
            });

在我将 socket.io 聊天添加到我的应用程序之前,它一直运行良好。当我包含 socket.io 服务器提供的 socket.io.js 文件时,我的 headers 消失了 :(

当然,我可以在每个 ajax 请求中放入我的 headers,但这并不方便。我原来的方法更干净。

任何人都可以帮助我吗?为什么我的 headers 不见了?有没有办法让它们在使用 socket.io 时再次工作?

更新

当我去掉socket.io.js脚本时包含:

<script src="http://localhost:6001/socket.io/socket.io.js"></script>

一切正常。不,没有错误,因为我是这样做的:

if(typeof io !== 'undefined') {
    self.echo = window.Echo = new Echo({
        broadcaster: 'socket.io',
        host: CONFIG.socket_url + ":" + CONFIG.socket_port,
        auth: {
               headers: {
                        Authorization: 'Bearer ' + auth.getToken(),
                        Accept:  'application/json'
               },
        },
     });
 }

更新2

问题可能不是 socket.io,而是 laravel-echo(使用 socket.io 进行广播)。

如果把那个Echo代码注释掉怎么办?

你看,我能做的就是评论我能看到的代码。我坚持我的断言,即 socket.io 中没有任何内容会干扰 jQuery Ajax 调用。

因此,问题可能是由 socket.io 处于活动状态时您 运行 的代码引起的,而不是由 socket.io 本身引起的。