节点.JS Socket.IO SSL CORS 错误



所以,我做了一个使用NodeJS和 Socket.IO 的应用程序,它工作得很好。最近,我安装了一个SSL证书并将套接字从http://example.com:8080移动到https://example.com:8443。但是现在,我收到此错误:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://example.com:8443/socket.io/?EIO=3&transport=polling&t=M4Kox0q. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).

现在,我做了一些研究,我认为这是因为端口(从:443:8443的请求),但是我怎样才能让它不被阻止?

这是客户端代码:

socket = io.connect("https://example.com:8443", {
secure: true
});

和服务器端:

io = require('socket.io');
server = require('https').createServer({
key: fs.readFileSync('./cloudflare.key'),
cert: fs.readFileSync('./cloudflare.crt')
}, (req, res) => {
res.writeHead(200, {
'Access-Control-Allow-Origin': '*'
});
}).listen(socket_port);
io = io(server, {
origins: 'example.com:*'
});

除此之外,在开发工具的Network选项卡中,请求以523 No Reason Phrase状态代码列出。

其他可能有用的信息:

  • 我使用cloudflare SSL(使用Full选项)。
  • 我使用 NodeJS v9.4.0

如果使用express,则需要通过使用此简单配置安装 CORS 节点包来正确处理 CORS。

const cors = require('cors')
let app = express()
app.use(cors({credentials: true, origin: true}))

io = require('socket.io');
server = require('https').createServer({
key: fs.readFileSync('./cloudflare.key'),
cert: fs.readFileSync('./cloudflare.crt')
}, (req, res) => {
res.writeHead(200, {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Headers": "Origin, X-Requested-With, Content-Type, Accept, Authorization"
});
}).listen(socket_port);
io = io(server, {
origins: 'example.com:*'
});

您还可以查看这些网站启用 CORS 或 MDN CORS 处理。 我希望这有所帮助。

最新更新