如何解决Flask CORS 有时有效,有时无效
我在 Tornado Wsgi 容器中部署了一个 Flask 应用程序。 Tornado 服务器托管在 http://localhost:5000
上。这整个事情是使用 Nginx 反向代理部署的。 Flask 通过 CORS 将其端点提供给 Tornado 服务器:
app = Flask(__name__)
cors = CORS(app,resources={r"/*": {"origins": "*"}})
app.config['CORS_HEADERS'] = ['Content-Type','Authorization']
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0
flask 应用的部署方式如下:
flask_app = tornado.wsgi.WsgiContainer(app)
tornado_app = tornado.web.Application(
[
# tornado specific handlers,(r"/(.*)",tornado.web.FallbackHandler,dict(fallback=flask_app))
],log_function=log_function,websocket_max_message_size=100 * 1024 * 1024)
http_server = tornado.httpserver.HTTPServer(
tornado_app,max_buffer_size=1024 ** 3,)
这是我的 Nginx 配置:
upstream frontend {
server localhost:5000;
}
gzip on;
gzip_types text/plain text/css text/xml
application/x-javascript application/xml
text/javascript;
proxy_next_upstream error;
server {
listen <server_ip>:80;
server_name <server_hostname>;
auth_basic "Administrator's Area";
auth_basic_user_file /etc/Nginx/.htpasswd;
location / {
proxy_pass http://frontend/;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-Scheme $scheme;
}
}
当我使用 Nginx 反向代理时,所有烧瓶端点都出现 CORS: Request did not succeed
错误。如果没有它,localhost:5000
的 Tornado 服务器会接受所有的 Flask 路由。有时,它会自行工作,有时则不会。大多数情况下,是后者。我还尝试在 Nginx 配置中设置特定于 cors 的标头,但它不起作用。
解决方法
花了很多时间来解决这个问题,但我很高兴提出一个解决方案(以防有人发现)。实际上,我不再需要使用 flask-CORS
。在部署中,来源始终相同,即 <server_hostname>
或 <server_ip>
。解决步骤:
- 删除了 Flask 应用程序中的 cors 和配置行
- 在我的 tornado 应用程序中,我像这样替换了烧瓶路线:
http://localhost:5000/flask_app
# to
http://<server_hostname>/flask_app
- 如果您在 Nginx 中配置了 cors,也请删除相应的
add_header
指令。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。