28

我在本地运行一个 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 请求。

4

3 回答 3

5

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

希望能解决问题。

于 2017-03-01T08:00:53.967 回答
4

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

“当使用 JSON 跨源时,浏览器将为 POST 请求发出飞行前 OPTIONS 请求。为了让浏览器允许具有 JSON 内容类型的 POST 请求,您必须允许 Content-Type 标头。最简单的方法是只需在您的应用程序上设置 CORS_HEADERS 配置值:例如“

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

app.config['CORS_HEADERS'] = 'Content-Type'
于 2019-08-31T05:12:47.527 回答
4

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

于 2021-04-13T21:18:17.997 回答