vue socket.io连接尝试返回“没有'Access-Control-Allow-Origin'标头不存在”错误,即使已设置来源

杜伊

我已经尝试调试了几天,我在其他1个应用程序上有套接字的经验,但是它在同一个域中,我不认为跨域会遇到很多麻烦虽然vue.js应用

我一直在尽自己最大的努力来调试它,并且尝试了所有我能想到的东西。

在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”标头。因此,不允许访问源“ 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();
});

我还向apache配置中添加了一个websocket代理,如果您建议迁移到nginx,请告诉我

<VirtualHost *:80>
    ServerAdmin [email protected]
    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()),它返回正确的原点字符串。

感谢您的任何帮助

编辑:

因此,我取得了一些进展,我在apache vhost配置文件中手动设置了标头。

像这样(并且我不得不将Credentials设置为true,因为它也会由于此原因而出错):

    <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。

杜伊

所以事实证明,我要做的就是在http而不是app上监听

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章