【问题标题】:CORS with socket.io带有 socket.io 的 CORS
【发布时间】:2014-02-28 23:24:23
【问题描述】:

我在使用 express.io 的 node.js 应用程序上遇到了 CORS 问题。我正在远程托管 socket.io 客户端 js,因为它需要作为远程应用程序工作。

<script src="resources/js/socket.io.min.js"></script>

它托管在 OpenShift 上

server.js:

var ipaddr = process.env.OPENSHIFT_NODEJS_IP || "localhost";
var port = process.env.OPENSHIFT_NODEJS_PORT || 8080;
var express = require('express.io');
// magical express.io
var app = express();

// Enables CORS
var enableCORS = function(req, res, next) {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
    res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With, *');

        // intercept OPTIONS method
    if ('OPTIONS' == req.method) {
        res.send(200);
    } else {
        next();
    };
};

app.configure(function() {
    // enable CORS!
    app.use(enableCORS);

});

app.http().io();
app.io.set('origins', '*:*');
    //.... other stuff
    app.listen(port, ipaddr);

然后在客户端上:

var socket = io.connect(window.chat_url);

当我从 localhost:8888 与服务器 localhost:8080 运行客户端时,socket.io 工作正常。

当我从 localhost:8888 运行客户端并在 odechat-latestsightings.rhcloud.com 上运行服务器时,socket.io 超时:

萤火虫: GET http://nodechat-latestsightings.rhcloud.com:8888/socket.io/1/?t=1391542144169 1m 16s

其他路线工作正常: GET http://nodechat-latestsightings.rhcloud.com/rooms 200 OK 664ms

我就是想不通

【问题讨论】:

  • 我也加入了 server.js。没有运气。 app.io.set('origins', ':');

标签: javascript node.js socket.io


【解决方案1】:

http://nodechat-latestsightings.rhcloud.com/socket.io/1/?t=1391542144169 似乎工作正常

网址中没有端口号,你绑定的端口是什么?

【讨论】:

  • 啊,有光!我正在使用 var socket = io.connect('nodechat-latestsightings.rhcloud.com/'); - 所以我没有指定端口。 8888 是远程(客户端)服务器正在运行的端口。我不确定为什么要插入它
  • 看看标题,你可能会被重定向或类似的东西
  • 不,据我所知没有重定向。由于某种原因,它似乎只是插入了客户端服务器的端口。我正在使用默认端口重新安装 MAMP,然后再试一次。我仍然想深入了解这一点,因为该应用程序需要从任何远程主机上运行
  • 得到了一个网址,所以我可以看看会发生什么?
  • 是的,我刚刚上传到readitsideways.com/chatiotest/chat.html#。工作正常,因为客户端 url 上没有端口。如果有一个端口(例如带有 MAMP 的 8888),它会将其插入到 io.connect url。诡异的。十分感谢你的帮助。至少我现在知道问题出在哪里,而且它在大多数情况下都会起作用
【解决方案2】:

另外,如果您的服务器在 openshift 上,那么您应该绑定到端口:8000 以使用 websockets,因为这是端口 openshift 的 nginx 反向代理具有公共访问权限。

您可以从这里阅读更多内容:https://developers.openshift.com/en/managing-port-binding-routing.html

【讨论】:

    猜你喜欢
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-19
    • 1970-01-01
    • 2015-05-16
    • 2013-11-24
    • 2018-08-27
    相关资源
    最近更新 更多