DjangoのAPIサーバーでPreflightを通過させれるようなヘッダー情報を付加できるようにしたいです。
しかし、Django-cors-headersがうまく動作していないようです。
まず、ローカルの自前DjangoサーバのAPIをChromeブラウザのjsコード経由で読み込もうとすると、
Access to XMLHttpRequest at 'http://127.0.0.1:8000/api/hoge/' from origin 'http://localhost:56957' has been blocked by CORS policy: Request header field token is not allowed by Access-Control-Allow-Headers in preflight response.
となってしまいました。
調べるとDjango側でヘッダーをつけていないためにCROS制約に引っかかているようでしたので、以下のようにDjango-cors-headersをsettings.pyに追加してみました。
しかし、これでもヘッダーにprefrightリクエスト通すために必要な情報が含まれるようにはなりませんでした。
INSTALLED_APPS = [ #Django apps 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'corsheaders',#追加 ] MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'corsheaders.middleware.CorsMiddleware',#追加 'django.middleware.common.CommonMiddleware', ] #以下追加 CORS_ALLOW_ALL_ORIGINS = True # If this is used then `CORS_ALLOWED_ORIGINS` will not have any effect CORS_ALLOW_CREDENTIALS = True CORS_ALLOW_METHODS = [ 'DELETE', 'GET', 'OPTIONS', 'PATCH', 'POST', 'PUT', ] CORS_ALLOW_HEADERS = [ 'accept', 'accept-encoding', 'authorization', 'content-type', 'dnt', 'origin', 'user-agent', 'x-csrftoken', 'x-requested-with', 'access-control-allow-origin', ]
以上を追加した後にcurlで取得した情報のヘッダ−
HTTP/1.1 200 OK Date: Wed, 21 Jul 2021 11:55:26 GMT Server: WSGIServer/0.2 CPython/3.8.3 Content-Type: application/json Content-Length: 449 Vary: Origin X-Frame-Options: DENY X-Content-Type-Options: nosniff Referrer-Policy: same-origin
調べた限りだと、上記のような設定で十分なヘッダーを返せるようなつもりでしたが、どうも不十分なようです。
これは、どのように修正すると、preflightを通過させるのに十分なヘッダー情報が反映されるようになるのかもしわかる方がいらっしゃいましたら、ご指導いただけると大変助かります。
あなたの回答
tips
プレビュー