首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flask-SocketIO和400错误请求

Flask-SocketIO和400错误请求
EN

Stack Overflow用户
提问于 2019-03-03 18:09:41
回答 2查看 10K关注 0票数 3

我正在使用socketio运行Flask应用程序来处理通知。Flask应用程序在端口5000监听,客户端在8080。

js客户端总是收到这样的错误:

代码语言:javascript
复制
VM15520:1 GET http://localhost:5000/socket.io/?EIO=3&transport=polling&t=Mb2_LpO 400 (Bad Request)
Access to XMLHttpRequest at 'http://localhost:5000/socket.io/?EIO=3&transport=polling&t=Mb2_LpO' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

实际上,我正在使用gunicorn启动我的应用程序,如下所示:

代码语言:javascript
复制
gunicorn --workers=1 --worker-class eventlet --certfile=keys/key.crt --keyfile=keys/key.key --bind 0.0.0.0:5000 myapp.run:app

这是我的run.py:

代码语言:javascript
复制
import eventlet
from myapp import create_app
eventlet.monkey_patch()
app, celery = create_app('config_prod.py')

我也在我的应用工厂中使用CORS(应用程序)。

我还尝试在我的一个蓝图中添加以下内容:

代码语言:javascript
复制
@api.after_request
def after_request(response):
    response.headers.add('Access-Control-Allow-Origin', 'http://localhost:8080')
    response.headers.add('Access-Control-Allow-Headers',
                         'Origin, X-Requested-With, Content-Type, Accept, Authorization')
    response.headers.add('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS')
    response.headers.add('Access-Control-Allow-Credentials', 'false')
    return response

我使用nginx作为反向代理,所以我尝试添加我在flask-socketio的文档中看到的相应配置:

代码语言:javascript
复制
location /socket.io {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_http_version 1.1;
    proxy_buffering off;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    proxy_pass https://my_backend_host/socket.io;
}

怎么了?谢谢!

EN

回答 2

Stack Overflow用户

发布于 2020-04-17 04:04:59

我在React Flask-SocketIO上遇到了类似的400问题,这个问题是由于CORS错误造成的。flask中的以下代码修复了我的问题,

代码语言:javascript
复制
socketio = SocketIO(app)
socketio.init_app(app, cors_allowed_origins="*")

此外,当您选择仅[websocket]传输时,请确保您在服务器中使用eventletgevent-websocketGevent不支持websocket,因此只能与HTTP轮询回退一起使用。

票数 13
EN

Stack Overflow用户

发布于 2019-03-04 21:32:58

问题是我使用http而不是https添加原始主机。一切都很正常。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54967708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档