【问题标题】:Flask-CORS not working for POST, but working for GETFlask-CORS 不适用于 POST,但适用于 GET
【发布时间】:2017-01-25 19:55:00
【问题描述】:

我在本地运行一个 Flask-Restful API,并从不同的端口发送一个包含 JSON 的 POST 请求。我收到了错误

No 'Access-Control-Allow-Origin' header is present on the requested resource.

但是,当我跑步时

curl --include -X OPTIONS http://localhost:5000/api/comments/3
        --header Access-Control-Request-Method:POST
        --header Access-Control-Request-Headers:Content-Type
        --header Origin:http://localhost:8080

我明白了

HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Allow: HEAD, GET, POST, OPTIONS
Access-Control-Allow-Origin: http://localhost:8080
Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT
Vary: Origin
Access-Control-Allow-Headers: Content-Type
Content-Length: 0

将“Access-Control-Allow-Origin”显示为“*”。 GET 工作正常,只是 POST 给出了这个错误。可能出了什么问题?如果相关,对于我正在使用的前端 react 和通过 axios 请求。

【问题讨论】:

  • 您好,您找到解决方案了吗?我也遇到了同样的情况,任何更新都会有所帮助。

标签: python flask cors axios flask-cors


【解决方案1】:

您必须将CORS(app, resources={r"/*": {"origins": "*"}}) 添加到您的烧瓶应用程序中。

希望能解决问题。

【讨论】:

  • 有关 CORS 的更多信息,请参阅:stackabuse.com/…
  • 谢谢,不幸的是,由于添加了资源,它仍然只对我有用
【解决方案2】:

Flask-Cors 文档解释了为什么会发生这种情况

"当使用 JSON 跨域时,浏览器会为 POST 请求发出一个 pre-flight OPTIONS 请求。为了让浏览器允许带有 JSON 内容类型的 POST 请求,您必须允许 Content-Type 标头。最简单的方法是这样做只是在您的应用程序上简单地设置 CORS_HEADERS 配置值:例如“

https://flask-cors.readthedocs.io/en/1.9.0/

app.config['CORS_HEADERS'] = 'Content-Type'

【讨论】:

  • 为了让浏览器运行从服务器请求数据的 Angular 应用程序,您应该使用什么来代替“content-type”?
【解决方案3】:

就我而言,由于内部错误而引发了 CORS 错误。一个与 CORS 完全无关的错误(应该返回 500)导致了这种情况。

【讨论】:

  • 你是怎么最终发现是500错误的?
猜你喜欢
  • 2021-12-16
  • 2015-01-04
  • 1970-01-01
  • 2021-09-08
  • 2020-05-26
  • 1970-01-01
  • 1970-01-01
  • 2020-06-30
  • 1970-01-01
相关资源
最近更新 更多