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"]
);
在您的情况下,您可以将*
传递给origin
或origins
属性(取决于您使用的版本)以允许所有来源。虽然建议将其锁定到某些来源。
【讨论】:
谢谢,我在这件事上经历了 10 个不同的线程,但找不到答案,这有帮助,感谢! 没问题。我很乐意提供帮助。如果它解决了您的问题,请接受我的回答。谢谢!以上是关于Cors 标头未正确处理(http 请求很好,但 socke.io 连接不正确)的主要内容,如果未能解决你的问题,请参考以下文章
Ionic 2 / Angular 2 / CORS:HTTP 标头未随请求一起发送
尽管配置了正确的 CORS 标头,但 301 响应“跨源请求被阻止”