【问题标题】:CORS request did not succeed in python flask-socketioCORS 请求在 python flask-socketio 中没有成功
【发布时间】:2019-08-21 00:49:44
【问题描述】:

我需要调试帮助 - 同源策略不允许读取位于 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 对烧瓶框架中静态文件夹下的图像工作正常

屏幕截图 2: 此屏幕截图说明套接字调用没有 access-control-orgin

【问题讨论】:

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


    【解决方案1】:

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

    socketio = SocketIO(app, cors_allowed_origins=your_origins_here)
    

    您可以使用'*' 作为允许所有来源的值(我不推荐),或者将单个来源设置为字符串,或将来源列表设置为字符串列表。

    【讨论】:

    • 感谢您的回复。我已经做了上述更改。查看下面的代码,socketio = SocketIO(app,cors_allowed_origins=['xxxxxxx']) 但我得到了以下错误。 “从源 'xxxxxxxxx' 访问 XMLHttpRequest 在 'https:xxxxxxxx' 已被 CORS 策略阻止:'Access-Control-Allow-Origin' 标头包含多个值 'xxxxxx, *',但只有一个是允许。”
    • 感谢您的回复。这里请求 URL 表示客户端 URL 对吗?如果是,某些协议我无法在此处提供直接 URL。但示例客户端 URL 是 xxxxx.com:8443 服务器 URL 是 192.XXX.X.X:5000
    • 我需要知道是哪个请求产生了多个 CORS 标头。我所说的 URL 是指完整的 URL,而不仅仅是域和端口。随意省略域名,我对给你这个错误的 URL 的路径部分更感兴趣。
    • 感谢您的回复。从源 yyy.yyy.yyy.yy 访问 XMLHttpRequest 在 xxx.xxx.xxx.xx/socket.io/… 已被 CORS 策略阻止:“Access-Control-Allow-Origin”标头包含多个值 yyy.yyy.yyy.yy、*,但只允许一个值 - 这是完整的错误从浏览器返回的消息。
    • 对不起,'Access-Control-Allow-Origin' 也在 nginx vhost 文件中配置。现在通过从 nginx 的 vhost 中删除该行可以正常工作。感谢您的回复
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    • 2018-12-22
    • 1970-01-01
    • 2019-07-24
    • 2016-02-05
    • 2014-09-07
    相关资源
    最近更新 更多