Socket.io - Problème de CORS

Par Pandazaur, il y a 10 ans


Javascript NodeJS

Bonjour,

J'ai un problème de communication avec les sockets entre mon navigateur et mon serveur Node.JS:

Je voudrais que lorsque j'appuis sur un bouton, un évenement lié à ma socket se produise mais j'ai une erreur de ce type:

Blocage d'une requête multi-origines (Cross-Origin Request) : la politique « Same Origin » ne permet pas de consulter la ressource distante située sur http://192.168.1.92:8080/socket.io/?EIO=3&transport=polling&t=1445280584218-4. Raison : échec de la requête CORS

Voici mon code coté client:

$(document).ready(function() { var IP = '192.168.1.92'; var socket = io('http://' + IP + ':8080'); console.log('Connecté à ' + IP); //_A l'appui sur "Envoyer", on envoie le message $('#btn-send').click(function () { console.log('Clik !'); var author = $('#author').val(); var message = $('#message').val(); var date = new Date(); if(author !== undefined && message !== undefined) { socket.emit('sendMessage', {author: author, message: message, date: date }); } }); });

Du coté serveur:

var app = require('express')(); var server = require('http').createServer(app); var io = require('socket.io')(server); app.listen(8080); //[...] //_Connexion du client au site, création de la socket io.on('connection', function(socket) { console.log('Nouvel utilisateur connecté ... '); //_On envoie a l'utilisateur qu'il est connecté socket.emit('connexionState', {state: true}); //_Quand un utilisateur écrit un message, on le met dans la DB, et on l'affiche socket.on('sendMessage', function (data) { conssole.log('IO : Event - sendMessage'); //_EQUIVALENT au POST /new/message var newMessage = new Message({ author: data.author, message: data.message, heure: data.heure }); newMessage.save(function (err, resObj) { if(err) { console.error(err); res.sendStatus(500); return(500); } else { console.log('Added a new message in the DB.'); res.sendStatus(200); return(200); } }); //_On renvoie le message à tout le monde ! io.emit('new-message', {author: data.author, message: data.message, heure: data.heure }); }); });

Je suis tombé sur pas mal de sujets qui traitait la question mais je n'ai pas trouvé de solution.

Pouvez vous m'aidez ou me mettre sur la voie SVP ?

Merci

3 réponses

Huggy, il y a 10 ans

As-tu essayé de configurer CORS côté serveur ?

var io = require('socket.io')(server, {origins:'mydomain.com:* http://mydomain.com:* http://www.mydomain.com:*'});

de la lecture ici

Il semble important de récupérer le script client sur le même serveur

<script src="http://192.168.1.92/vendor/socket.io.js" ></script>
Pandazaur, il y a 10 ans

Bonjour,

J'ai essayé de faire ceci:

Serveur:

var io = require('socket.io')(server, {origins:'*:*'});

Client: le fichier est bien chargé

<script src="socket.io.js"></script>

J'ai toujours les même erreursn mais j'ai remarqué que lorsque je fait un :

var socket = io('http://localhost:8080');

pour remplacer:

var socket = io('http://192.168.1.92:8080');

Le message: Blocage d'une requête multi-origines (Cross-Origin Request) : la politique « Same Origin » ne permet pas de consulter la ressource distante située sur http://192.168.1.92:8080/socket.io/?EIO=3&transport=polling&t=1445280584218-4. Raison : échec de la requête CORS n'est plus présent et je n'ai plus que l'erreur:

GET XHR http://localhost:8080/socket.io/ [HTTP/1.1 404 Not Found 1ms]
Pandazaur, il y a 10 ans

Problème résolu en ayant coté serveur:

var app = require('express')(); var server = require('http').createServer(app); var io = require('socket.io').listen(server); server.listen(8080);

Et ne pas mettre:

app.listen(8080);