套接字 IO 错误“对 XMLHttpRequest 的访问已被 CORS 策略阻止”

Ega*_*n N 7 sockets websocket node.js express socket.io

我的应用程序最近收到一个错误

“在‘ https://my-service-domain/socket.io/?EIO=3&transport=polling&t=M-eWtUQ ’从源‘ https://my-app-domain ’访问 XMLHttpRequest已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。”

当我连接到 socket.io 时。我还没有找到解决这个问题的方法,我将在下面的图片中详细描述,有没有人遇到过这个错误。

在此处输入图片说明

服务器配置:

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:'*:*'});
Run Code Online (Sandbox Code Playgroud)

客户端配置:

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

我尝试切换 websocket 连接选项var socket = io('https://my-service-domain', {transports: ['websocket']}),但出现错误

“WebSocket 连接到 'wss://my-service-domain/socket.io/?EIO=3& transport = websocket' 失败:WebSocket 握手期间出错:意外响应代码:400”

小智 14


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);
Run Code Online (Sandbox Code Playgroud)


sha*_*ker 13

它是 100% 工作的..我花了 2 个小时,终于找到了答案。只需用这个替换代码...

const express = require("express")
var app = express();
var server = app.listen(4000);
var io = require('socket.io')(server, {
    cors: {
      origin: '*',
    }
});
Run Code Online (Sandbox Code Playgroud)


小智 0

如果您使用 HTTPS 协议,请尝试使用以下代码片段:

var http = require('https');
Run Code Online (Sandbox Code Playgroud)