2

我正在尝试使用 Flask-SocketIO 将 websocket 功能添加到我的应用程序中。

我的应用程序架构是高度解耦的,因此我想使用一组不同的服务器来处理 websocket 的东西。但是,在我的测试中,我使用的是具有不同端口的同一台服务器。

当我尝试使用 JavaScript 连接时:

<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/socket.io/0.9.16/socket.io.min.js"></script>
<script type="text/javascript" charset="utf-8">
    var socket = io.connect("http://dev.example.com:8000");
    socket.on('connect', function() {
        socket.emit('my event', {data: 'I\'m connected!'});
    });
</script>

我得到错误:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://dev.example.com:8000/socket.io/1/?t=1442224745873. (Reason: CORS request failed).

所以为了缓解这个问题,我做了一些 CORS 的东西并在这里添加了crossorigin定义:http: //flask.pocoo.org/snippets/56/

我不会发布装饰器的代码,因为我没有从上面的网页上更改它。

然后在我的端点上,我使用了装饰器:

@app.route('/socket/')
@crossdomain(origin='http://dev.example.com:8000', headers='Content-Type')
def socket():
    return render_template('socket.html')

我也试过:

@app.route('/socket/')
@crossdomain(origin='*', headers='Content-Type')
def socket():
    return render_template('socket.html')

在加载 /socket/ 端点的 HTTP 响应标头中,我可以看到标头:

Access-Control-Allow-Headers:Content-Type
Access-Control-Allow-Methods:HEAD, OPTIONS, GET
Access-Control-Allow-Origin:http://dev.example.com:8000
Access-Control-Max-Age:21600
Content-Length:448
Content-Type:text/html; charset=utf-8
Date:Mon, 14 Sep 2015 10:20:09 GMT
Server:Werkzeug/0.10.4 Python/2.7.9

但我仍然收到 CORS 错误。有人有什么想法吗?:)

4

1 回答 1

0

原来我在 localhost 上运行服务器,而不是 0.0.0.0。不知道为什么这给了我一个 CORS 错误,但它解决了问题。

于 2015-09-14T10:32:11.017 回答