【问题标题】:Cors headers not handled properly ( http requests are fine, but socke.io connections not)Cors 标头未正确处理(http 请求很好,但 socke.io 连接不正确)
【发布时间】:2021-06-11 14:53:20
【问题描述】:

任何人都可以帮助我解决这个问题。下面的代码没有正确处理 cors。当我发送 http 请求时,返回的标头很好,但是尝试通过 socket.io-client 建立连接时,我没有得到 cors 标头作为响应。任何人都知道为什么会发生这种情况以及如何解决它?

const express = require("express");
const http = require('http')
const app = express();
const socket = require("socket.io");
const cors = require("cors");

app.use(cors());
app.options('*', cors())
app.use(express.json());

app.get('/', (req,res)=>{
    res.send({e: 'elo'})
})
const server = http.createServer(app);

const io = socket(server);

io.on("connection", (socket) => {
  console.log("user connected to: ")
});
io.on("message", (data) => {
  console.log(data);
});
server.listen(3001);

【问题讨论】:

    标签: node.js express socket.io cors


    【解决方案1】:

    Socket IO 与 express 分开处理 CORS。请参阅以下内容:

    socket.io v2 docs

    const io = socket(server, {
      origins: ["https://example.com"]
    });
    

    socket.io v3 docs

    const io = socket(server, {
      cors: {
        origin: "https://example.com",
        methods: ["GET", "POST"]
      }
    });
    

    在您的情况下,您可以将* 传递给originorigins 属性(取决于您使用的版本)以允许所有来源。虽然建议将其锁定到某些来源。

    【讨论】:

    • 谢谢,我在这件事上经历了 10 个不同的线程,但找不到答案,这有帮助,感谢!
    • 没问题。我很乐意提供帮助。如果它解决了您的问题,请接受我的回答。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    相关资源
    最近更新 更多