Node.JS Socket.IO SSL CORS错误

时间:2018-01-20 19:03:16

标签: node.js sockets ssl cors cloudflare

所以,我已经制作了一个使用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:*'
});

除此之外,在Dev Tools的Network标签中,请求列出了523 No Reason Phrase状态代码。

可能有用的其他信息:

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

1 个答案:

答案 0 :(得分:1)

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

const cors = require('cors')

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

OR

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:*'
});

您还可以查看这些网站Enable CORSMDN CORS处理。 我希望这有帮助。