

高岡智則
年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)
クロスオリジンリソース共有とは?
ウェブブラウザには 同一オリジンポリシー というセキュリティの約束があります。これは一つのウェブサイトが別のドメインの情報を勝手に読み書きするのを制限するものです。
しかし実務では他のサイトのデータを取得したいケースが多いです。そこで現代のウェブではサーバーが適切な許可を返すことで クロスオリジンリソース共有 を可能にします。これを略して CORS と呼びます。
なぜ必要か
クロスオリジンリソース共有があると、別のサイトにあるデータを安全に利用できます。例えば天気情報のAPIや地図データ、SNSの投稿などを自分のサイトから表示したいときに役立ちます。ただし許可の設定を間違えると情報漏えいになる危険性があるため、慎重に運用することが大切です。
どう動くのか
クライアント側のブラウザが別のドメインへリクエストを送るとき、先にサーバーへ「このOriginからのリクエストを許可しますか」と確認する仕組みを プリフライト と呼びます。このときサーバーはレスポンスに特定のヘッダーを返します。
| ヘッダー | 意味 | 例 |
|---|---|---|
| Access-Control-Allow-Origin | 許可された Origin を伝える | https://example.com |
| Access-Control-Allow-Methods | 許可された HTTP メソッド | GET POST |
| Access-Control-Allow-Headers | 許可されたヘッダー | Content-Type |
| Access-Control-Allow-Credentials | クレデンシャルを許可するか | true |
このような設定が正しく揃えば、ブラウザはデータの取得を許可します。重要なのは Access-Control-Allow-Origin の値と Credentials の扱いです。
よくある間違いと注意点
・全てのサイトを一度に許可するためにヘッダーに "*" を使うのは危険です。特にクレデンシャルを使う場合は必ず特定の origin を指定します。
・サーバー側の設定だけでなく、クライアントのリクエストにも注意してください。プリフライトが多すぎるとアプリの挙動が遅くなることがあります。
実務でのちょっとした実例
あなたが自分のサイトから別の API にアクセスしたい場合、API 側のサーバー管理者が Access-Control-Allow-Origin ヘッダーを正しく返す必要があります。もしあなたが API を自分で管理している場合、以下のように設定します。
| 設定例 | 説明 | 備考 |
|---|---|---|
| Origin: 自分のサイトの URL | Access-Control-Allow-Origin にその URL を返す | 複数 origins の場合はパターンに合わせて設定 |
| Credentials 設定 | true に設定 | クレデンシャルを使う場合のみ |
さらに、テストを行うときはブラウザのデベロッパーツールを使ってリクエストとレスポンスを確認しましょう。エラーメッセージは素直に原因を教えてくれます。
まとめとして、クロスオリジンリソース共有はウェブ上のデータ連携を安全に進める重要な仕組みです。正しく理解し、必要な範囲で適切に設定しましょう。
クロスオリジンリソース共有の同意語
- クロスオリジンリソース共有
- 正式名称。異なるオリジン間でリソースの読み込み・共有を許可・制御する仕組みのこと。ブラウザとサーバが適切なヘッダをやり取りしてアクセスを許可するか決定します。
- オリジン間リソース共有
- 同義語として使われる表現。異なるオリジン間でリソースを共有できるようにする仕組みを指します。
- クロスドメインリソース共有
- “クロスドメイン”を用いた表現。ドメインが異なる場合でもリソースを共有する仕組みの意味です。
- クロスオリジンアクセス制御
- 異なるオリジンからのアクセスを許可・制限する規則・仕組み。主にサーバのレスポンスヘッダを通じて制御します。
- オリジン間アクセス制御
- 同様に、異なるオリジン間のアクセスをコントロールする機構のこと。
- CORSポリシー
- CORSの方針や規則の集まりを指します。どのオリジンがどのリソースへ、どのメソッドでアクセスできるかを定義します。
- クロスオリジンリクエスト許可
- 異なるオリジンからのリクエストをサーバが許可するかどうかを決める機能。プリフライトリクエストやAccess-Control-Allow-*ヘッダで実現します。
- Cross-Origin Resource Sharing
- 英語表記の正式名称。日本語の表現と同じ概念を指し、技術資料などで原語として使われることもあります。
クロスオリジンリソース共有の対義語・反対語
- 同一オリジンポリシー
- ウェブブラウザが、ページと同じオリジン(スキーム・ホスト・ポートが同一)からのリソース取得のみを許可する基本的なセキュリティ方針。CORSの対義語的な考え方としてよく使われます。
- 同一オリジンのみ許可
- 同じオリジンからのリソース取得のみを許可する運用方針。外部ドメインからのリクエストを基本的に遮断します。
- クロスオリジン拒否
- 外部オリジンからのリソース共有を明示的に拒否する設定・挙動のこと。
- クロスオリジン全面禁止
- 外部オリジンからのすべてのリソース共有を禁止する、極めて厳格なポリシー。
- CORSなし(非対応)
- サーバが Access-Control-Allow-Origin ヘッダを返さず、クロスオリジン共有を許可しない状態。
- 同一-originポリシー必須設計
- ウェブアプリの設計方針として、同一オリジンを前提にリソースを扱う構成。
- オリジン間共有の回避設計
- クロスオリジン通信を避けるためのアーキテクチャ選択・設計思想。
- オリジン間共有を禁止するポリシー
- 組織やアプリが外部ドメインとのリソース共有を認めない方針。
- 外部オリジン受け入れを前提としない設計
- 外部ドメインからのリソース読み込みを前提とせず、同一オリジン内で完結する構成を取る考え。
クロスオリジンリソース共有の共起語
- 同一オリジンポリシー
- ブラウザが異なるオリジン間のリソース共有を原則禁止するセキュリティルール。CORSはこのポリシーを柔軟にする仕組みです。
- プリフライトリクエスト
- サーバーに許可を事前確認するための特殊なHTTPリクエスト。許可されるメソッドやヘッダーを事前に問い合わせます。
- シンプルリクエスト
- プリフライトを必要としない、比較的制限の少ないクロスオリジンリクエストのこと。
- Originヘッダー
- リクエスト元のオリジンを示すHTTPヘッダー。サーバーが許可を判断する材料になります。
- Access-Control-Allow-Origin
- サーバーが応答で許可するオリジンを指定するレスポンスヘッダー。
- Access-Control-Allow-Methods
- サーバーが許可するHTTPメソッドを指定するレスポンスヘッダー(例:GET, POST, PUT)。
- Access-Control-Allow-Headers
- サーバーが受け入れるリクエストヘッダーを指定するレスポンスヘッダー。
- Access-Control-Max-Age
- プリフライトリクエストの結果をキャッシュする時間を秒単位で指定します。
- Access-Control-Allow-Credentials
- クレデンシャル( cookies や認証情報 )のクロスオリジン送信を許可するかを指定します。
- Access-Control-Expose-Headers
- ブラウザのJavaScriptから参照できるレスポンスヘッダーを指定します。
- ワイルドカード
- Access-Control-Allow-Origin に '*' を使って全てのオリジンを許可する設定のこと。
- クレデンシャル
- クッキーや認証情報などの資格情報をクロスオリジンで送受信すること。
- サーバーサイド設定
- サーバー側で正しいCORSヘッダーを設定して許可範囲を決める作業。
- フロントエンド
- ブラウザ上のコード(JavaScriptなど)からクロスオリジンリクエストを送る側のこと。
- バックエンド
- リクエストを受け取り、CORSヘッダーを返すサーバー側の処理。
- ブラウザ
- クライアント側のウェブブラウザ。CORSの適用対象となる主体。
- HTTPヘッダー
- リクエスト・レスポンスに付随するメタ情報。CORSではOriginやAccess-Control-*が重要。
- セキュリティポリシー
- クロスオリジン通信を制御する方針。設定次第でどのオリジンを許可するかが決まる。
- 実リクエスト
- プリフライトを経た後に送信される、実際のHTTPリクエストのこと。
- レスポンスヘッダー
- サーバーが返すヘッダー群。CORS関連ではAccess-Control-*が含まれます。
クロスオリジンリソース共有の関連用語
- クロスオリジンリソース共有
- 異なるオリジン間でリソースの取得を許可する仕組み。サーバー側が適切なヘッダを返すことで、ブラウザが安全にデータを共有できるようになります。
- 同一オリジンポリシー
- ブラウザが、同一のオリジンからのみデータを自由に読み書きできるようにする基本的なセキュリティ制限です。
- オリジン
- スキーム(http/https)+ホスト名+ポート番号の組み合わせを指します。
- プリフライトリクエスト
- 非シンプルなリクエストを送る前に、サーバーが許可するメソッド・ヘッダを確認するための OPTIONS リクエストです。
- シンプルリクエスト
- GET/HEAD/POST のうち、特定の条件を満たす場合にプリフライトを省略できるリクエストのこと。
- Access-Control-Allow-Origin
- サーバーが許可するオリジンを知らせるレスポンスヘッダ。ワイルドカード '*' の場合、認証情報を伴うリクエストには使用できません。
- Access-Control-Allow-Methods
- プリフライトリクエスト時に許可するHTTPメソッドの一覧を返すヘッダです。
- Access-Control-Allow-Headers
- プリフライトリクエスト時に許可するヘッダの一覧を返すヘッダです。
- Access-Control-Allow-Credentials
- 認証情報(クッキー・認証ヘッダなど)の送信をクロスオリジンで許可するかを示します。
- Access-Control-Expose-Headers
- クライアント側から参照できるレスポンスヘッダの一覧を示します。
- Access-Control-Max-Age
- プリフライトの結果をキャッシュできる秒数を指定するヘッダです。
- Access-Control-Request-Method
- プリフライトリクエストで実際に使う予定のメソッド名を示すヘッダです。
- Access-Control-Request-Headers
- プリフライトリクエストで実際に使う予定のヘッダ名を列挙するヘッダです。
- ワイルドカードオリジン
- Access-Control-Allow-Origin に '*' を設定して全てのオリジンを許可する設定です。ただし資格情報を伴う場合は利用できません。
- Vary-Origin
- レスポンスを Origin に応じて変えることを示すための Vary ヘッダ。キャッシュの正確性を保つために重要です。
- クレデンシャル付きリクエスト
- クッキーや HTTP 認証情報を含むリクエストのこと。適切なヘッダ設定が必要です。
- withCredentials
- Fetch API や XHR でクレデンシャルを送信するかどうかを指定する設定です。
- Credentialsモード
- Fetch API の credentials オプションの値には include / same-origin / omit があり、クロスオリジンでの認証情報の扱いを決めます。
- オリジン間リソース共有のセキュリティリスク
- 設定ミスにより機密データの露出や CSRF 的リスクが高まる可能性があるため、慎重な運用が求められます。
- オリジン間リソース共有の誤設定
- 特定の Origin を厳密に許可すべき場面でワイルドカードを使う、Credentials を許可するのに '*' を使う等の誤設定を指します。
- 不透明なレスポンス
- クロスオリジンのリクエストに対して、レスポンス本文が読み取れない“opaque”な結果になる状態を指します。
- 不透明なリダイレクト
- クロスオリジンのリダイレクト時に、最終レスポンスが読み取れず不透明になる場合があります。
- プリフライトレスポンス
- OPTIONS リクエストに対するサーバーの応答。ここで Access-Control-Allow-* ヘッダが返されます。
- シンプルリクエストの条件
- Content-Type が application/x-www-form-urlencoded、multipart/form-data、text/plain のいずれか、または特定のシンプルヘッダのみを使う場合に適用されます。
- サーバーサイド設定
- CORS ヘッダをサーバー側で設定すること。Nginx、Apache、Express などの実装例が含まれます。
- 実装ベストプラクティス
- 最小限のオリジンのみを許可、Credentials の扱いを慎重に、プリフライトを過剰に発生させない設計、適切なキャッシュを使う等の実践事項です。
- CORSミドルウェア
- Express などの枠組みで CORS ヘッダを簡単に設定できるライブラリ・機能の総称です。
- CORSプロキシ
- CORS の制約を回避する目的で用いられる中継サーバーのこと。通常は推奨されず、回避策として理解されます。
クロスオリジンリソース共有のおすすめ参考サイト
- CORS とは-クロスオリジンリソース共有の説明 - AWS
- オリジン間リソース共有 (CORS)とは #JavaScript - Qiita
- 【図解で解説】CORS(Cross-Origin Resource Sharing)とは - Zenn
- CORS とは-クロスオリジンリソース共有の説明 - AWS
- CORSとは?CORSの基礎や仕組みと実装方法までくわしく解説



















