问题标签 [flask-cors]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
104 浏览

angularjs - Flask API:如何正确地将参数传递给 angularjs $resource PUT 方法中的 url?

我有以下代码,一个消耗 API 休息的工厂:

在控制器中,我使用工厂:

数据检索得很好,但现在我需要更新这个实体的数据,我想使用工厂有的更新方法:

但我不知道为什么它总是让我失败(这些方法适用于 curl 和其他程序,如邮递员)。

这是失败标头的示例:

对象{数据:空,状态:-1,标题:fd/<(),配置:对象,状态文本:“”}

我不明白发生了什么,我认为问题出在我传递 id 的方式上。我确定实体vm.teacherteacherId一个整数值,但我不知道为什么没有通过。另外,我看到了 Firefox 的网络控制台(在我的情况下),我看到对服务器的调用不存在,但是当我将定义更改为 id 时,例如:

调用完成但出现错误,因为 url 最后没有实体标识符,而 PUT 方法中的服务器需要它。

假用户的一个例子是(在得到它之后):

任何想法?我被屏蔽太多次了。

谢谢!

编辑

如果我更改代码并设置 GET 方法调用它:

但不是当方法是 PUT 时:

0 投票
1 回答
2236 浏览

flask - 从 Vue 上传文件到 Flask CORS 不起作用

我正在尝试将文件从 vue 上传到烧瓶,但我得到了

跨域请求被阻止:同源策略不允许在http://localhost:5000/upload读取远程资源。(原因:CORS 标头“Access-Control-Allow-Origin”缺失)..

这是我的 Vue 代码:

这是我的 app.py

0 投票
1 回答
2386 浏览

python - 在 Flask 中允许 CORS

我有一个烧瓶端点,我以以下方式允许 CORS。

我仍然遇到以下问题。

对预检请求的响应未通过访问控制检查:响应中“Access-Control-Allow-Credentials”标头的值为“”,当请求的凭据模式为“包含”时,该值必须为“真”。因此,不允许访问来源“ http://something.com:8888 ”。

关于如何解决此问题的任何建议。

0 投票
1 回答
13092 浏览

python - Python Flask CORS - API 始终允许任何来源

我浏览了许多 SO 答案,但似乎找不到这个问题。我有一种感觉,我只是错过了一些明显的东西。

我有一个基本的 Flask api,并且我已经实现了 flask_cors 扩展和自定义 Flask 装饰器[@crossdomain from Armin Ronacher]1 ( http://flask.pocoo.org/snippets/56/ ) 两者都显示相同的问题。

这是我的示例应用程序:

(插入编辑 3):

当我在浏览器中(从 127.0.0.1)从 JS 向该端点发出 GET 请求时,它总是返回 200,我希望看到:

卷曲:

日志:

我什至没有在响应中看到所有正确的标头,而且它似乎并不关心请求中的来源。

有什么我想念的想法吗?谢谢!


编辑:

作为旁注,查看此处的文档示例(https://flask-cors.readthedocs.io/en/v1.7.4/#a-more-complicated-example),它显示:

...这很有趣,因为我已经在没有任何 CORS 装饰的情况下暴露了根路径(和其他路径),并且它们从任何来源都可以正常工作。因此,这种设置似乎存在根本性的问题。

沿着这些思路,这里的教程(https://blog.miguelgrinberg.com/post/designing-a-restful-api-with-python-and-flask)似乎表明 Flask api 应该自然地暴露在没有保护的情况下(我会假设这只是因为尚未应用 CORS 扩展),但我的应用程序基本上只是像 CORS 扩展甚至不存在一样运行(除了您可以看到的日志中的一些注释)。


编辑2:

我的评论不清楚,所以我在 AWS API Gateway 上创建了三个具有不同 CORS 设置的示例端点。它们是简单地返回“成功”的 GET 方法端点:

1) CORS 未启用(默认):

回复:

XMLHttpRequest 无法加载 https://t9is0yupn4.execute-api.us-east-1.amazonaws.com/prod/cors-default。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问源“ http://127.0.0.1:5000 ”。响应具有 HTTP 状态代码 403。

2) 启用 CORS - 来源受限:

回复:

XMLHttpRequest 无法加载 https://t9is0yupn4.execute-api.us-east-1.amazonaws.com/prod/cors-enabled-example。对预检请求的响应未通过访问控制检查:“Access-Control-Allow-Origin”标头的值“ http://example.com ”不等于提供的来源。因此,不允许访问源“ http://127.0.0.1:5000 ”。

3) 启用 CORS - 来源通配符:

回复:

我对基础设施没有那么丰富的经验,但我的期望是启用 Flask CORS 扩展会导致我的 api 端点模仿这种行为,具体取决于我在设置中origins=设置的内容。我在这个 Flask 设置中缺少什么?


解决方案编辑:

好吧,鉴于我的某些事情显然不正常,我剥离了我的应用程序并为每个 CORS 来源限制的变体重新实现了一些非常基本的 API。我一直在使用 AWS 的弹性 beanstalk 来托管测试环境,所以我重新上传了这些示例并对每个示例运行 JS ajax 请求。它现在正在工作。

Access-Control-Allow-Origin在裸端点上遇到错误。看来,当我为部署配置应用程序时,我取消了注释CORS(application, resources=r'/api/*'),这显然是允许裸端点的所有来源!

我不确定为什么带有特定限制origins=[]

特别感谢sideshowbarker的所有帮助!

0 投票
2 回答
2439 浏览

python - zappa 自定义授权器,用于带 cors 的烧瓶

我正在将 flask-cors 用于 aws python aws lambda API。我用 zappa 部署它,它按预期工作。然而,cors 不适用于受https://github.com/awslabs/aws-apigateway-lambda-authorizer-blueprints/blob/master/blueprints/python/api-gateway-authorizer-python.py启发的自定义授权器

我用 try/except 更改了授权代码,并在异常时为 OPTION 方法生成策略,但 Option 方法仍然返回 401。

如果它使事情变得容易,我不介意解决方法。

谢谢

我尝试了一种建议的解决方案:即在 API Gateway 中为 401 响应设置标头,遗憾的是浏览器预检期望成功的状态码。

更新。我重新开始实施我的授权人,也考虑过使用 aws auth 服务。

0 投票
1 回答
2160 浏览

python - Python Flask-cors 没有返回任何 cors 标头作为响应

我正在使用Flask-Cors==3.0.3 这是我为我的应用程序设置它的方式,其中前端localhost:9000在 apache 上,而后端在localhost:8080

我的要求是:

响应是:

我也尝试以这种方式而不是上述方式进行操作,结果仍然相同......响应中没有 CORS 标头:(

我在这里做错了什么吗?在这里尝试更多的东西来改变这个:

对此:

但结果相同:(

似乎确实有效的是使用装饰器而不是像这样的全局应用程序级别设置:

0 投票
2 回答
514 浏览

python - 从应用程序发送请求时始终返回 400 (flask_corse)

我有一个在 flask 和 flask_restful 中实现的后端,并且有许多不同的路线。我的前端在另一个源上运行,这意味着我使用了 flask_curse 以允许我的前端向我的后端发送请求。

下面你可以看到我的应用程序的初始化:

这是我从前端调用的路线:

当我使用 Postman 发送请求时,一切正常。但是,当我从我的应用程序发送请求时,我总是返回 400。我也更改了内容类型,但没有任何成功。

这是我从我的应用程序发送的请求。

当我发送内容类型为 Json 的请求时,客户端首先发送一个选项请求(返回代码 200),但实际请求仍然失败。

我感谢任何提示或建议。

0 投票
1 回答
1078 浏览

flask - CherryPy 托管的 Flask 应用程序:OPTIONS 返回 404

我有一个使用 Flask 和 Flask-Restful 创建的 RESTful API。使用开发服务器一切正常。所有路线都在蓝图中,尽管我们在这里处理的特定路线不是 Flask-Restful 路线。这只是一条普通的 Flask 路线。

我也在使用 Flask-CORS。

部署时,一切都是 dockerized,我使用 CherryPy 作为 WSGI 主机。因此,CherryPy 应用程序将 Flask 应用程序托管在容器中。我在另一个容器中使用 Traefik 作为反向代理。

如果我通过粘贴 URL 在 Chrome 中发出以下请求,则 GET 请求有效:

但是,如果我尝试从 React 应用程序发出相同的 GET 请求,则会发出一个 OPTIONS 预检请求,但它会以 404 失败。我已经尽我所能在 PyCharm 中跟踪它,问题似乎出在Flask 的 app.py 中的以下代码:

基本上没有找到蓝图。

在这个 curl 调用中可以看到实际发送的内容:

如果我打印出 Flask-app 收到的标头(在 @app.before_request 中),我会得到以下信息:

现在,如果我在没有 traefik 反向代理的情况下运行应用程序时发出相同的请求,它就可以工作。curl请求中唯一不同的是我使用的是http,而不是https。

以下是 Flask 在这种情况下收到的标头:

我认为标题有问题或使 Flask 感到困惑。我看到 2014 年的另一篇文章提到需要 SERVER_NAME,但这没有帮助。

最后,我最初使用 NGinx 作为备用代理,并且一切正常。难以使用 NGinx 的一件事是重定向和 OPTION 请求。在疯狂地追逐各种博客文章之后,我确实让它工作了,但是当我回顾它时,我注意到了一件奇怪的事情:我最终在 nginx.conf 中编写脚本以自动为所有 OPTIONS 请求返回 200!

知道为什么 OPTION 请求失败了吗?

0 投票
8 回答
50247 浏览

python - Python flask-cors ImportError: No module named 'flask-cors' Raspberry pi

我正在关注此处文档中的 flask-cors 教程: https ://pypi.python.org/pypi/Flask-Cors

但是当我将它安装在我的树莓派上并运行我的 python 应用程序时,我收到了这个错误

Traceback (most recent call last): File "app.py", line 3, in <module> from flask_cors import CORS, cross_origin ImportError: No module named 'flask_cors'

这是我的python脚本:

0 投票
1 回答
1639 浏览

http - Http 到 https 重定向被 CORS 策略阻止

我正在尝试从使用 https 的网站上运行的 chrome 开发人员工具控制台窗口向 localhost 服务器发出 GET(或 POST)请求(在本例中为 outlook.com,但对于任何 https 都是相同的)。如果我从在 http 上运行的网站运行相同的代码,它工作正常。

我得到的错误:

无法加载http://127.0.0.1:5000/ :从“ http://127.0.0.1:5000/ ”重定向到“ https://127.0.0.1:5000/ ”已被 CORS 策略阻止:否“ Access-Control-Allow-Origin' 标头出现在请求的资源上。因此,不允许访问来源“ https://outlook.live.com ”。

我发现 https 到 http 通信是不可能的,但是在 https 上运行烧瓶服务器也无济于事,在这种情况下,Flask 甚至无法识别传入的请求。

我有一个 Flask 应用程序正在运行,代码:

我用于请求的 javascript:

我知道有很多类似的问题,但是发布的解决方案都没有对我有用,如何从运行在 https 网站上的 chrome 开发人员工具创建成功的 GET 或 POST 请求到 localhost 服务器(最好是 Flask)?