0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

オリジン間リソース共有(Cross-Origin-Resource-Sharing、CORS) 概要

Posted at

オリジン間リソース共有(Cross-Origin-Resource-Sharing、CORS) とは

  • あるオリジンで動作するウェブアプリに、異なるオリジンに存在するリソースへのアクセス権を与えるようブラウザに指示する仕組み。

    • オリジン
      * ウェブコンテンツにアクセスするために使われる URLのプロトコル、 ドメイン(ホスト)、 ポート によって定義される情報。
      * スキーム、ドメイン(ホスト)、ポートがすべて一致した場合、二つのオブジェクトは同一オリジンであると言える。

      http://example.com/app1/index.html
      http://example.com/app2/index.html
      
  • オリジン間リクエスト例

    cors_image.png

    • https://domain-a.com で提供されているウェブアプリのフロントエンド JavaScript がXMLHttpRequest を使用して https://domain-b.com/image-b.png へリクエストを行う場合
      • セキュリティ上の理由から、ブラウザは、スクリプトによって実行されるオリジン間 HTTP リクエストを制限する。
      • XMLHttpRequestFetchは同一オリジンポリシー(あるオリジンのリソースは、そのリソースから他のオリジンのリソースにアクセスできないように制限する)に従う。
      • 上述のAPI を使用するウェブアプリは、そのアプリと同一オリジンに対してのみリソースのリクエストを行うことができ、それ以外のオリジンの場合は正しい CORS ヘッダーを含んでいる必要がある。

アクセス制御方法

単純リクエスト

  • サーバー側でレスポンスヘッダーAccess-Control-Allow-Originにリクエスト元オリジンを指定して、レスポンスを返却する。
    CORS_simple_request.png

プリフライトリクエスト

  • OPTIONSメソッドを指定した HTTP リクエストを他ドメインのリソースに向けて送信し、実際のリクエストを送信しても問題ないかを確認する。
    • オリジン間のリクエストがユーザーデータに影響を与える可能性があるような場合に行う。
    • Access-Control-Allow-Methods :リソースへのアクセス時に許可するメソッドを指定する。プリフライトリクエストのレスポンスで使用する。
    • Access-Control-Allow-Headers :リクエストでどの HTTP ヘッダーを使用できるかを示すために、プリフライトリクエストのレスポンスで使用する。
      CORS_preflight_request.png

資格情報付きリクエスト

  • クッキー付きでリクエストする。

  • サーバーはアクセスを許可する場合、Access-Control-Allow-Credentials:trueを付与してレスポンスを返却する。

    • Access-Control-Allow-Credentials :リクエストへのレスポンスを開示してよいか否かを示すヘッダー。プリフライトリクエストのレスポンスの一部として用いられたときは、実際のリクエストで資格情報を使用してよいかを示す。
      CORS_credential_request.png

参考情報

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?