クロスオリジン制御
CORS(Cross-Origin Resource Sharing、クロスオリジンリソース共有)は、ブラウザがクロスオリジンサーバーにリクエストを送信することを許可するメカニズムであり、ブラウザの同一オリジンポリシーの制限を克服します。
同一オリジンポリシーとは?
同一オリジンポリシーはブラウザのセキュリティ機能であり、あるオリジンから読み込まれたドキュメントやスクリプトが別のオリジンからのリソースとどのように相互作用するかを制限します。「同一オリジン」とは、同じプロトコル、ドメイン名、ポート番号を指します。
なぜCORSが必要か?
フロントエンドアプリケーションが異なるオリジンのAPIにアクセスする必要がある場合、CORSのサポートが必要です。例:
- フロントエンドアプリケーションが
https://frontend.comにデプロイされている - APIサービスが
https://api.backend.comにデプロイされている
CORSがない場合、ブラウザはフロントエンドアプリケーションがAPIサービスにアクセスするのを阻止します。
CORSの仕組み
CORSは一連のHTTPヘッダーを通じてクロスオリジンアクセス制御を実現します:
- シンプルリクエスト:直接送信され、サーバーはレスポンスヘッダーで許可するかどうかを制御
- プリフライトリクエスト:ブラウザはまずOPTIONSリクエストを送信してサーバーにクロスオリジン許可を確認し、許可を得てから実際のリクエストを送信
ブラウザが Method::OPTIONS のプリフライトリクエストを送信するため、この種のリクエスト処理を追加する必要があり、CORSミドルウェアを Service に追加する必要があります。
SalvoでのCORSの使用
Salvoは組み込みのCORSミドルウェアを提供しており、簡単に設定して使用できます。以下はサンプルコードです:
注意:.hoop(cors)ミドルウェアは Service に作用します。.hoop(cors)ミドルウェアは Service に作用します。.hoop(cors)ミドルウェアは Router ではなく Service に作用します。
これにより、OPTIONSプリフライトが自動的に処理されます。
サンプルコード
主な設定オプション
CORSミドルウェアは様々な設定オプションを提供します:
- 許可するオリジン:どのドメインがリソースにアクセスできるかを制御
- 許可するメソッド:許可するHTTPメソッド(GET、POSTなど)を指定
- 許可するヘッダー:許可するリクエストヘッダーを指定
- 公開するヘッダー:クライアントがアクセスできるレスポンスヘッダーを指定
- 資格情報の許可:リクエストにクッキーなどの資格情報を含めることを許可するかどうか
- プリフライトリクエストのキャッシュ時間:プリフライトリクエスト結果のキャッシュ時間
CORSを適切に設定することで、セキュリティを確保しつつ、クロスオリジンアクセスのニーズを満たすことができます。