Javascript Apache上Socket.IO和Node.JS的CORS问题
我已经阅读了所有与这个问题相关的问题。这一定是人们在使用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模块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
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,等等。