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/

上記のWebページにあるものから変更していないため、デコレーターのコードは投稿しません。

そして、エンドポイントでデコレータを使用しました:

@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