2 つの別個のコンポーネントを持つ WebApp を構築しています。
- Web 訪問者がアクセスする「フロントエンド」node.js アプリケーション サーバー (localhost:3099 で実行)
- ORM を管理し、データベースと対話する「バックエンド」Django サーバー (localhost:3098 で実行)。Web 訪問者がこのサーバーと直接対話することはまったくありません。このサーバーは、フロントエンドで使用される RESTful API を発行するだけです。
フロントエンド サーバー以外がバックエンドの API にアクセスできないようにするセキュリティ制限を実装します。
バックエンドが発行する API エンドポイントの 1 つは、次のようになりますhttp://localhost:3098/api/myApi/
。
次のように、curl からその API を正常にヒットできます。curl -X POST -H "Content-Type: application/json" -d '{"myKey1":"myVal1", "myKey2":"myVal2"}' http://localhost:3098/api/myApi/
しかし、Javascript を使用してフロントエンド サーバーから同じ API をヒットしようとすると、ブラウザーのコンソール ウィンドウに次のエラーが表示されます。
XMLHttpRequest cannot load http://localhost:3098/api/myApi/.
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://localhost:3099' is therefore not allowed access.
これを解決するために、次の手順を実行しました。
- django-cors-headersをインストールしました
- 私
'corsheaders'
は私のINSTALLED_APPS
- 上に追記
'corsheaders.middleware.CorsMiddleware'
しましたMIDDLEWARE_CLASSES
'django.middleware.common.CommonMiddleware'
- ホワイトリストを宣言しました:
CORS_ORIGIN_WHITELIST = ('localhost', '127.0.0.1',)
ただし、django-cors-headers を実装しても違いはないようです。同じ CORS エラーが引き続き発生します。この問題を解決するにはどうすればよいですか?