HTTP
クロスオリジンとアクセス制御
サーチ…
備考
クロスオリジンリソース共有は、 AJAXなどの手法を使用して、ドメイン間で動的な要求を行うことができるように設計されています 。スクリプティングはほとんどの作業を行いますが、HTTPサーバーは正しいヘッダーを使用して要求をサポートする必要があります。
クライアント:クロスオリジンリソース共有(CORS)要求を送信する
Origin
ヘッダーを含め、 Origin
を越えた要求を送信する必要があります。これは、リクエストの発信元を示します。たとえば、からのクロスオリジン・リクエストhttp://example.com
にhttp://example.org
次のようになります。
GET /cors HTTP/1.1
Host: example.org
Origin: example.com
サーバーはこの値を使用して、要求が許可されているかどうかを判断します。
サーバー:CORS要求への応答
CORS要求への応答には、CORSリソースの使用を許可されている発信Access-Control-Allow-Origin
示すAccess-Control-Allow-Origin
ヘッダーが含まれている必要があります。このヘッダーは、次の3つの値のいずれかをとります。
- 起源。これを行うと、 その起源からの要求のみが許可されます。
- キャラクター
*
。これにより、 任意の起点からの要求が許可されます。 - 文字列
null
これにより、CORS要求は許可されません 。
たとえば、起源http://example.com
からのCORS要求の受信時に、 example.com
が許可された発信元である場合、サーバーは次の応答を返します。
HTTP/1.1 200 OK
Access-Control-Allow-Origin: example.com
任意の起源の応答もこの要求を許可する、すなわち:
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
ユーザーの資格情報またはセッションを許可する
ユーザーの資格情報またはユーザーのセッションをCORS要求とともに送信できるようにすることで、サーバーはCORS要求を介してユーザーデータを保持できます。これは、データを提供する前にユーザーがログインしているかどうかをサーバーが確認する必要がある場合に便利です(ユーザーがログインしている場合にのみアクションを実行します。これにより、資格情報とともにCORS要求を送信する必要があります)。
これは、 OPTIONS
プリフライト要求に応答してAccess-Control-Allow-Credentials
ヘッダーを送信することによって、プリフライトされた要求のサーバー側で実現できます。リソースをDELETE
するCORS要求の次の場合を実行します。
OPTIONS /cors HTTP/1.1
Host: example.com
Origin: example.org
Access-Control-Request-Method: DELETE
HTTP/1.1 200 OK
Access-Control-Allow-Origin: example.org
Access-Control-Allow-Methods: DELETE
Access-Control-Allow-Credentials: true
Access-Control-Allow-Credentials: true
行は、次のDELETE
CORS要求がユーザーの資格情報とともに送信されることを示します。
プリフライトリクエスト
基本的なCORS要求では、次の2つの方法のいずれかを使用できます。
- 取得する
- 役職
ほんの少数の選択ヘッダーがあります。 POST CORS要求では、さらに3つのコンテンツタイプのみを選択できます。
この問題を回避するために、他のメソッド、ヘッダー、またはコンテンツタイプを使用する要求は、まずアクセス制御要求ヘッダーを含むOPTIONS
要求であるプリフライト要求を発行する必要があります。たとえば、サーバーがDNT
ヘッダーを含むPUT
要求を受け入れるかどうかを確認するプリフライト要求です。
OPTIONS /cors HTTP/1.1
Host: example.com
Origin: example.org
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: DNT
サーバー:プリフライトリクエストに応答する
サーバーがプリフライト要求を受信すると、要求されたメソッドとヘッダーをサポートしているかどうかをチェックし、要求をサポートする能力を示す応答と、その他の許可されたデータ(資格情報など)を返す必要があります。
これらは、アクセス制御のヘッダーの許可で示されます。サーバはまた、プリフライト応答がキャッシュされる期間を示すアクセス制御Max-Age
ヘッダを返送することができる。
これは、プリフライトリクエストのリクエスト/レスポンスサイクルが次のようなものになります。
OPTIONS /cors HHTP/1.1
Host: example.com
Origin: example.org
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: DNT
HTTP/1.1 200 OK
Access-Control-Allow-Origin: example.org
Access-Control-Allow-Methods: PUT
Access-Control-Allow-Headers: DNT