web-dev-qa-db-ja.com

Flask-CORSはPOSTでは機能しませんが、GETでは機能します

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を介してリクエストしています。

11
hatooku

CORS(app, resources={r"/*": {"origins": "*"}})をflaskアプリに追加する必要があります。

それが問題を解決することを願っています。

3
porthunt

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'
1
ifeislife