J'ai essayé de déboguer cela pendant quelques jours maintenant, j'ai J'avais de l'expérience avec les sockets sur 1 autre application mais c'était sur le même domaine, je ne pensais pas que j'aurais autant de problèmes avec une application cross.js de domaine.vue socket.io tentative de connexion renvoyant "Non" L'en-tête Access-Control-Allow-Origin 'est présent "erreur même lorsque les origines ont été définies
Je l'ai débugué à mon meilleur efforts et ont essayé essentiellement tout ce que je peux penser.
Dans le serveur Node.js j'ai mis origines avec
let io = require('socket.io')(http, {origins: '*:* agora.dev:*'})
puis-je écouter les connexions avec
io.on('connection', (socket)=>{
console.log('connection received')
})
mais aucune connexion vient jamais. Et dans la console de la page app vue est tout ce que je reçois ces erreurs 404 en disant
https://gyazo.com/0197aaa3d12ba37d852d3d4b136f2afa
XMLHttpRequest agora.dev/:1 ne peut pas charger http://agoraserver.dev/socket.io/?EIO=3&transport=polling&t=Lwj7pq6. Aucun en-tête 'Access-Control-Allow-Origin' n'est présent sur la ressource demandée. L'origine 'http://agora.dev' n'est donc pas autorisée. La réponse a un code d'état HTTP 404.
J'utilise le modèle de webpack de vue.js, et le paquet vue-socket.io et package socket.io-client aussi.
donc mon main.js fichier app vue ressemble si
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)
Je suis même allé et changé mon environnement localhost à un domaine un via/etc/hosts en raison de cette question sur le sujet No 'Access-Control-Allow-Origin' header is present
Mais cela ne l'a pas non plus corrigé.
Je ne peux vraiment pas penser à autre chose.
J'ai même permis CORS sur le middleware agoraserver mais ... ce n'est pas vraiment ce que cela est sur le point
//ENABLE CORS
app.all('/', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next();
});
Et j'ai aussi ajouté un proxy websocket à la config apache, si vous Recomend passer à nginx , s'il vous plaît laissez-moi savoir
<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 ne semble pas être en train de définir les bons en-têtes. J'ai console.log (io.origins()) et il renvoie la chaîne d'origine appropriée.
Merci pour toute aide
modifier:
donc j'ai fait un peu de progrès, régler manuellement les en-têtes dans le fichier de configuration vhost apache.
comme si (et je devais définir des justificatifs à vrai parce qu'il a craché une erreur à cause de cela aussi):
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin: 'http://agora.dev'
Header set Access-Control-Allow-Credentials true
</IfModule>
Mais je reçois toujours cette erreur dans la console
GET http://agoraserver.dev/socket.io/?EIO=3&transport=polling&t=LwjHMHH 404 (Not Found)
Qu'est-ce que le se passe ...
J'utilise la version 2.0.3 socket.io^sur le client et le serveur par la façon ..