在Python flask-socketio中,CORS请求未成功

时间:2019-08-20 05:09:08

标签: python flask cors flask-socketio flask-cors

我需要调试方面的帮助-Same Origin Policy不允许读取https://some-domain.com上的远程资源。 (原因:CORS请求未成功)是python flask-socketio错误。

我正在使用python flask-socketio开发一个聊天应用程序。在先前的版本中,我在本地创建了该应用程序,并且按预期运行正常,同时将以下代码移至服务器,该服务器显示上述错误。客户端代码在https服务器上运行,服务器代码也在https服务器上运行,我不知道为什么会显示该错误。

我在下面附加了我的代码,请给我一个更好的解决方案。

server.py

    import json
    import os
    from flask import Flask, render_template, request,session
    from flask_socketio import SocketIO, send, emit
    from datetime import timedelta,datetime
    from flask_cors import CORS

    app = Flask(__name__)
    app.config['SECRET_KEY'] = 'secretkey'
    app.config['DEBUG'] = True
    app.config['CORS_HEADERS'] = 'Content-Type'
    cors = CORS(app, resources={r"/*": {"origins": "*"}})
    socketio = SocketIO(app)

    users = {}

    @app.before_request
    def make_session_permanent():
        session.permanent = True
        app.permanent_session_lifetime = timedelta(minutes=1)

    @app.route('/')
    #@cross_origin(origin='*',headers=['Content- Type','Authorization'])
    def index():
        return render_template('index.html')

    @socketio.on('connect')
    def connect():

        print("connected");
    @app.route('/orginate')
    def orginate():
        socketio.emit('server orginated', 'Something happened on the server!')
        return '<h1>Sent!</h1>'

    @socketio.on('username')
    def receive_username(username):
        users[username] = request.sid
        #users.append({username : request.sid})
        #print(users)
        emit('userList', users, broadcast=True)
        print('Username added!')
        print(users)
    if _name_ == '__main__':
        socketio.run(app,host='xxx.xxx.xx.x',port=5001)

client.js

var socket = io.connect("https://xxx.xxx.xx.x:5001/",{secure:false});

截屏1: 该屏幕截图说明了在烧瓶框架中静态文件夹下的图像中,access-control-allow-orgin可以正常工作

enter image description here

截屏2: 该屏幕截图说明了套接字调用没有access-control-orgin enter image description here

1 个答案:

答案 0 :(得分:0)

您正在使用Flask-CORS在Flask路线上设置CORS。您缺少Flask-SocketIO的类似设置:

bitbake core-image-weston -c populate_sdk

您可以使用socketio = SocketIO(app, cors_allowed_origins=your_origins_here) 作为允许所有来源的值(我不建议这样做),或者将单个来源设置为字符串,或者将来源列表设置为字符串列表。