我已经尝试调试了几天,我在其他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] 删除。
我来说两句