Javascript Apache上Socket.IO和Node.JS的CORS问题

Javascript Apache上Socket.IO和Node.JS的CORS问题,javascript,node.js,apache,sockets,Javascript,Node.js,Apache,Sockets,我已经阅读了所有与这个问题相关的问题。这一定是人们在使用Socket.IO时面临的最常见的问题之一,似乎有很多解决方案。但是没有一个对我有用。IO和NodeJS在本地工作得非常好。当我将代码放在VPS上时,我无法成功访问socket.io服务器代码,因为它返回以下错误: XMLHttpRequest无法加载http://{THE_SERVER_IP}/socket.io/?EIO=3&transport=polling&t=LpxHZS6。请求的资源上不存在“Access Control All

我已经阅读了所有与这个问题相关的问题。这一定是人们在使用Socket.IO时面临的最常见的问题之一,似乎有很多解决方案。但是没有一个对我有用。IO和NodeJS在本地工作得非常好。当我将代码放在VPS上时,我无法成功访问socket.io服务器代码,因为它返回以下错误:

XMLHttpRequest无法加载http://{THE_SERVER_IP}/socket.io/?EIO=3&transport=polling&t=LpxHZS6。请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源“null”。响应的HTTP状态代码为404

以下是我迄今为止所做的尝试:

1) 使用CORS模块

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var cors = require('cors');

app.use(cors());

//Socket.IO code(connection, emit, etc)

io.listen(8080);

console.log('Server running at http://{THE_SERVER_IP}:8080/');
2) 在io变量上设置标头

io.set( 'origins', '*' );
NodeJS(没有Socket.IO模块)工作正常,我能够呈现一个简单的HTML并打印一条“helloworld”消息

这是客户端代码:

    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js" integrity="sha256-sdmLD9jD1PIzq3KOQPNSGZYxjv76rds79Mnyk5JNp1M=" crossorigin="anonymous"></script>
    <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
    <script>

        $(document).ready(function() {

            var socket = io('http://{THE_SERVER_IP}:80/node');

            socket.on('text', function(data) {

                $('h1').html(data);

            });

        });

    </script>

$(文档).ready(函数(){
var socket=io('http://{THE_SERVER_IP}:80/node');
socket.on('text',函数(数据){
$('h1').html(数据);
});
});
如有必要,Apache将请求重定向到NodeJS服务器的方式如下:

NameVirtualHost *:80

<VirtualHost *:80>
    ServerAdmin root@{THE_SERVER_DOMAIN}
    ServerName {THE_SERVER_DOMAIN}
    ServerAlias {THE_SERVER_DOMAIN}
    DocumentRoot /var/www/node/

   ProxyRequests Off
   ProxyPreserveHost On
   ProxyVia Full
   <Proxy *>
      Require all granted
   </Proxy>

   <Location /node>
      ProxyPass http://{THE_SERVER_DOMAIN}:8080
      ProxyPassReverse http://{THE_SERVER_DOMAIN}:8080
   </Location>

   <Directory "/var/www/node">
      AllowOverride All
   </Directory>

</VirtualHost>
NameVirtualHost*:80
ServerAdmin root@{u服务器\域}
服务器名{u服务器\域}
服务器别名{u服务器\域}
DocumentRoot/var/www/node/
代理请求关闭
代理主机
ProxyVia Full
要求所有授权
ProxyPass http://{THE_SERVER_DOMAIN}:8080
ProxyPassReverse http://{THE_SERVER_DOMAIN}:8080
允许超越所有

任何帮助都将不胜感激

看起来您的socket.io服务器在8080侦听,而您正试图在80访问它,可以吗?嗯,我考虑过了,但应该没有问题,因为代理正在重定向到端口8080处的NodeJS。没有Socket.IO的NodeJS也在8080监听,它工作正常。但我会尝试其他端口组合,切换到80,等等。