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 エラーが発生します。誰でもアイデアはありますか?:)