2017-09-23 3 views
1

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

Répondre

0

alors il se trouve que tout ce que j'avais besoin de faire était d'écouter sur http au lieu de l'application