CORSの設定をする場合、レスポンスヘッダにAccess-Control-Allow-Originヘッダーを設定したい場合があります。
アプリケーションでヘッダーを設定することも可能ですが、WEBサーバの処理でヘッダーを設定する事ができます。
今回はWEBサーバにレスポンスヘッダーを設定します。
今回の環境は以下になります。 Amazon Linux2 docker コンテナにて Apache2.4 を使用します。
モジュールの確認
レスポンスヘッダーの操作には mod_headers.so モジュールが必要です。
モジュールが存在し設定ファイルに読み込まれていることを確認しましょう。
・コマンド
grep -r mod_headers.so /etc/httpd/conf.modules.d
・結果
/etc/httpd/conf.modules.d/00-base.conf:LoadModule headers_module modules/mod_headers.so
Apacheが読み込むモジュールについては以下を参考にして下さい。
レスポンスヘッダーの設定
設定の変更
Apacheの設定ファイルに以下を追記します。
今回は Access-Control-Allow-Origin ヘッダーを追加してみました。
Header set Access-Control-Allow-Origin "*"
Apacheの設定読み込み
設定ファイルを変更しただけではApacheは設定を読み込んでくれません。Apacheを再起動すると変更した設定を読み込んでくれます。
ゆえに、Apacheを再起動します。
systemctl restart httpd
動作確認
動作確認用ファイルの作成
結果が確認しやすくなるように、確認用ファイルを作成します。
以下のコマンドを実行し、確認の為にブラウザに表示させるファイルを作成します。
内容は “test” と言う文字としますが内容はなんでも良いです。
・コマンド
vi /var/www/html/index.html
確認
以下のコマンドを実行し動作を確認しました。
・コマンド
curl --dump-header - http://localhost
・結果
Access-Control-Allow-Origin ヘッダーが追加されていることが分かります。
HTTP/1.1 200 OK
Date: Sun, 02 Jan 2022 01:27:41 GMT
Server: Apache/2.4.51 ()
Upgrade: h2,h2c
Connection: Upgrade
Last-Modified: Sun, 02 Jan 2022 01:25:08 GMT
ETag: "5-5d48f4647f939"
Accept-Ranges: bytes
Content-Length: 5
Access-Control-Allow-Origin: *
Content-Type: text/html; charset=UTF-8
test
最後に
Apacheに設定する場合、全てのHTTP通信に対してヘッダーが適用されます。Locationディレクティブを使用して特定のドメインに対してレスポンスを追加することや.htaccess を使用すること検討しても良いかもしれません。アプリケーションで設定することも可能です。
どちらがいいのかはケースバーイケースなのでプロジェクト内で話し合って決めましょう。