4
votes

Erreur Socket IO "L'accès à XMLHttpRequest a été bloqué par la stratégie CORS"

mon application a récemment reçu une erreur

"L'accès à XMLHttpRequest sur ' https: //my-service-domain/socket.io/? EIO = 3 & transport = polling & t = M-eWtUQ ' from origin ' https: // my-app-domain ' a été bloqué par la stratégie CORS : Aucun en-tête "Access-Control-Allow-Origin" n'est présent sur la ressource demandée. "

lorsque je me connecte à socket.io. Je n'ai pas encore trouvé de solution à ce problème, je décrirai en détail comme l'image ci-dessous, quelqu'un a déjà rencontré cette erreur.

entrez la description de l'image ici

Configuration du serveur:

var socket = io('https://my-service-domain', {transports: ['polling']});
socket.on(channel_id, function(data){
     // some code
});

Configuration du client:

var express = require('express');
var app = express();

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "X-Requested-With");
  res.header("Access-Control-Allow-Headers", "Content-Type");
  res.header("Access-Control-Allow-Methods", "PUT, GET, POST, DELETE, OPTIONS");
  next();
});
var http = require('http');
var server = http.createServer(app);
var io = require('socket.io').listen(server, {log:false, origins:'*:*'});

J'ai essayé de changer l'option de connexion websocket var socket = io('https://my-service-domain', {transports: ['websocket']}) , j'ai eu l'erreur

"La connexion WebSocket à 'wss: //my-service-domain/socket.io/? EIO = 3 & transport = websocket' a échoué: erreur lors de l'établissement de liaison WebSocket: code de réponse inattendu: 400"


1 commentaires

Est-ce que cela répond à votre question? Demande d'origine croisée Socket.io + Node.js bloquée


3 Réponses :


1
votes

Si vous utilisez le protocole HTTPS, essayez d'utiliser l'extrait de code suivant:

var http = require('https');


0 commentaires

0
votes

Lorsque j'ai hébergé sur Heroku mon application nodejs qui utilise socekt.io, j'ai eu la même erreur dans mon navigateur. Le problème était que je n'ai pas ajouté de script de démarrage dans le fichier package.json. Donc heroku ne pouvait pas démarrer mon application. Lorsque j'ai ajouté le script de démarrage, le problème a été résolu.


1 commentaires

Qu'est-ce que le start script ?



5
votes
If you are using Socket.IO v3, you need to explicitly enable Cross-Origin Resource Sharing (CORS).
const io = require("socket.io")(httpServer, {
  cors: {
    origin: "http://localhost:8080",
    methods: ["GET", "POST"]
  }
});

httpServer.listen(3000);

0 commentaires