Flask-CORS不适用于POST,但适用于GET

hat*_*oku 9 python cors flask flask-cors axios

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

No 'Access-Control-Allow-Origin' header is present on the requested resource.
Run Code Online (Sandbox Code Playgroud)

但是,当我跑

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
Run Code Online (Sandbox Code Playgroud)

我明白了

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
Run Code Online (Sandbox Code Playgroud)

其中"Access-Control-Allow-Origin"显示为"*".GET工作正常,只是POST给出了这个错误.怎么可能出错?如果相关,对于我正在使用的前端做出反应并通过axios请求.

Emr*_*lün 6

就我而言,由于内部错误而引发了 CORS 错误。导致此问题的原因是与 CORS 完全无关的错误(应返回 500)。


por*_*unt 5

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

希望能解决这个问题。

  • 谢谢,不幸的是,随着添加的资源它仍然只适用于我 (7认同)

小智 5

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'
Run Code Online (Sandbox Code Playgroud)