vue的socket.io连接尝试返回“否”访问控制允许来源“标题存在”错误即使已设置的来源

我一直在试图debugging这几天,我已经有一个其他应用程序的套接字的经验,但它是在同一个域,我不认为我会遇到这个跨域的麻烦vue.js应用程序虽然

我一直在尽我所能debugging这些,基本上已经尝试了所有我能想到的东西。

在node.js服务器中,我已经设置了起源

let io = require('socket.io')(http, {origins: '*:* agora.dev:*'}) 

然后我聆听与之的联系

 io.on('connection', (socket)=>{ console.log('connection received') }) 

但没有连接。 而在vue应用程序页面的控制台,我得到的是这些404错误说

https://gyazo.com/0197aaa3d12ba37d852d3d4b136f2afa

agora.dev/:1 XMLHttpRequest无法加载http://agoraserver.dev/socket.io/?EIO=3&transport=polling&t=Lwj7pq6 。 请求的资源上没有“Access-Control-Allow-Origin”标题。 Origin'http: //agora.dev '因此不被允许访问。 该响应具有HTTP状态码404。

我正在使用vue.js webpack模板,以及vue-socket.io包和socket.io-client包。

所以我的main.js vue应用程序文件看起来像这样

 import Vue from 'vue' import App from './App' import router from './router' import socketio from 'socket.io-client' import VueSocketIo from 'vue-socket.io' var SocketInstance = socketio('http://agoraserver.dev') Vue.use(VueSocketIo, SocketInstance) 

我甚至已经通过/ etc / hosts把我的本地主机环境改成了一个域,因为这个主题没有“Access-Control-Allow-Origin”标题

但是这也没有解决。

我真的想不出别的什么。

我甚至在agoraserver中间件上启用了CORS,但是…这不是真的

 //ENABLE CORS app.all('/', function(req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "X-Requested-With"); next(); }); 

我还添加了一个websocket代理到Apache的configuration,如果你推荐移动到nginx,请让我知道

 <VirtualHost *:80> ServerAdmin ireply@myleisure.com.au DocumentRoot "/Users/Nik/Dropbox/host-root/var/www/nodes/agora" ServerName agoraserver.dev <Directory /> Options -indexes +FollowSymLinks AllowOverride None Require all granted </Directory> RewriteEngine On RewriteCond %{HTTP:Upgrade} =websocket [NC] RewriteRule /(.*) ws://127.0.0.1:9999/$1 [P,L] RewriteCond %{HTTP:Upgrade} !=websocket [NC] RewriteRule /(.*) http://127.0.0.1:9999/$1 [P,L] ProxyRequests Off ProxyPreserveHost On ProxyVia Full <Proxy "*"> Require all granted </Proxy> ProxyPass / "http://127.0.0.1:9999/" ProxyPassReverse / "http://127.0.0.1:9999/" </VirtualHost> 

socket.io似乎没有设置正确的标题。 我有console.log(io.origins()),它返回正确的起源string。

感谢您的任何帮助

编辑:

所以我取得了一些进展,我手动将头文件设置在apache vhostconfiguration文件中。

像这样(我必须设置凭据为真,因为它也吐出一个错误):

  <IfModule mod_headers.c> Header set Access-Control-Allow-Origin: 'http://agora.dev' Header set Access-Control-Allow-Credentials true </IfModule> 

但我仍然在控制台中得到这个错误

 GET http://agoraserver.dev/socket.io/?EIO=3&transport=polling&t=LwjHMHH 404 (Not Found) 

这是怎么回事

我在客户端和服务器上使用socket.io版本^ 2.0.3 ..

所以事实certificate,我所需要做的就是听取http而不是应用程序