Cors 标头未正确处理(http 请求很好,但 socke.io 连接不正确)

Posted

技术标签:

【中文标题】Cors 标头未正确处理(http 请求很好,但 socke.io 连接不正确)【英文标题】:Cors headers not handled properly ( http requests are fine, but socke.io connections not) 【发布时间】: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);

【问题讨论】:

【参考方案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 个不同的线程,但找不到答案,这有帮助,感谢! 没问题。我很乐意提供帮助。如果它解决了您的问题,请接受我的回答。谢谢!

以上是关于Cors 标头未正确处理(http 请求很好,但 socke.io 连接不正确)的主要内容,如果未能解决你的问题,请参考以下文章

Ionic 2 / Angular 2 / CORS:HTTP 标头未随请求一起发送

尽管配置了正确的 CORS 标头,但 301 响应“跨源请求被阻止”

如何在 Angular 5 的标头中添加 CORS 请求

从 ExtJS 向 node.js 请求时出现 CORS 问题。请求或响应标头不正确?

在查询字符串中使用点 (".") 时未设置 CORS 标头

$http post 请求未添加指定的标头