【问题标题】:Node.JS Socket.IO SSL CORS errorNode.JS Socket.IO SSL CORS 错误
【发布时间】:2018-06-29 19:25:52
【问题描述】:

所以,我制作了一个使用 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

【问题讨论】:

  • 您需要修复523错误的原因。请参阅getstatuscode.com/523 “此状态代码未在任何 RFC 中指定,但被 CloudFlare 的反向代理用于指示已被网站管理员或代理本身阻止的资源”和 @987654322 @“Cloudflare 无法访问源服务器;例如,如果源服务器的 DNS 记录不正确” 以及support.cloudflare.com/hc/en-us/articles/… 的详细说明
  • 我在发帖之前已经阅读了这些材料,但是,由于我是 Cloudflare 和 HTTPS 的新手,它们并没有帮助我解决它...

标签: node.js sockets ssl cloudflare


【解决方案1】:

如果使用 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:*'
});

您还可以通过Enable CORSMDN CORS 处理这些网站。 我希望这会有所帮助。

【讨论】:

  • 做了第二个建议后,由于我不使用Express,错误仍然存​​在。但是,我不知道,这是我的一个想法(但如果是真的,我仍然需要帮助来解决它,因为我是 Cloudflare 和 HTTPS 的新手)。于是,我再次查看了Network选项卡,发现发送的请求是OPTIONS方法。所以,我不知道,也许那是我的套接字发送一些选项的时候,包括允许 CORS,但是 523 错误背后的原因也阻止了这些选项的发送。实际上,他们从来没有到达服务器,因为当他们到达时我尝试在控制台中打印,但什么也没发生,
猜你喜欢
  • 2017-05-24
  • 2012-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-27
  • 1970-01-01
  • 2018-08-08
  • 2016-06-12
相关资源
最近更新 更多