【问题标题】:Socket io v3 connection has been blocked by CORS policy套接字 io v3 连接已被 CORS 策略阻止
【发布时间】:2021-03-15 06:40:07
【问题描述】:

使用 Socketio v3 时出现 cors 错误 该应用程序在由 Nodejs 支持的 React 上

服务器端代码:

var server = http.createServer(app);
var port = process.env.PORT || '3000'
const io = require("socket.io")(server,{
cors: {
  origin: "*:*",
  methods: ["PUT", "GET", "POST", "DELETE", "OPTIONS"],
  allowedHeaders:["secretHeader"],
  credentials: true
}
})

客户端连接代码:

const SOCKET_URL = "https://fakeurl.org";
socket.current = io(`${SOCKET_URL}`,{
      secretHeader:{
        "Access-Control-Allow-Headers": "*"
      }
    });

我收到以下错误:

访问 XMLHttpRequest 在 'https://fakeurl.org/socket.io/?EIO=4&transport=polling&t=NOdqBkN' 来自原产地“http://localhost:3000”已被 CORS 政策阻止: 请求中不存在“Access-Control-Allow-Origin”标头 资源。

【问题讨论】:

  • 您是否尝试将Access-Control-Allow-Origin 添加到 allowedHeaders 中?
  • 删除客户端的secretHeader选项,使用“extraHeaders”代替它

标签: node.js reactjs websocket socket.io


【解决方案1】:

请参阅Socket.io Handling CORS

// server-side
const io = require("socket.io")(server,{
cors: {
  origin: "*",
  methods: ["PUT", "GET", "POST", "DELETE", "OPTIONS"],
  allowedHeaders:["secretHeader"],
  credentials: true
}
})
// client-side
const SOCKET_URL = "https://fakeurl.org";
socket.current = io(`${SOCKET_URL}`,{
      withCredentials: true,
      extraHeaders: {
          "secretHeader": "secret value"
      }
    });

【讨论】:

  • 服务器在特定端口上运行,是否影响流量?
  • 这不是问题。只需在服务器端使用 origin: "*" 作为 cors 选项。
  • 我可以删除 `allowedHeaders:["secretHeader"],` 并且不传递任何标题吗?
猜你喜欢
  • 2020-05-02
  • 2019-08-13
  • 2021-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-03
  • 2021-09-05
  • 2021-10-13
相关资源
最近更新 更多