Access-Control-Allow-Credentials ヘッダー
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
HTTP の Access-Control-Allow-Credentials はレスポンスヘッダーで、サーバーがオリジンをまたいだ HTTP リクエストに資格情報を添付することを許可するかどうかをブラウザーに指示します。
資格情報にはクッキー、TLS クライアント証明書、ユーザー名とパスワードを含む認証ヘッダーなどがあります。 デフォルトでは、これらの資格情報はオリジンをまたぐリクエストでは送信されません。そうすると、サイトが クロスサイトリクエストフォージェリー (CSRF) 攻撃に対して脆弱になる可能性があります。
クライアントは、サイト間リクエストで資格情報を添付することを、いくつかの方法で要求することをできます。
fetch()を使用する際にcredentialsオプションを"include"に設定する。XMLHttpRequestを使用する際に、XMLHttpRequest.withCredentialsプロパティをtrueに設定する。EventSource()を使用する際に、EventSource.withCredentialsプロパティをtrueに設定する。
資格情報が添付されるのは次の場合です。
- プリフライトのあるリクエストの場合、プリフラウとリクエストには資格情報を添付しません。
プリフライトリクエストに対するサーバーのレスポンスで
Access-Control-Allow-Credentialsヘッダーがtrueに設定されている場合、実際のリクエストには資格情報を添付します。そうでない場合、ブラウザーはネットワークエラーを報告します。 - プリフライトのないリクエストの場合、リクエストには資格情報が添付されます。サーバーのレスポンスで
Access-Control-Allow-Credentialsヘッダーがtrueに設定されていない場合、ブラウザーはネットワークエラーを報告します。
| ヘッダー種別 | レスポンスヘッダー |
|---|
構文
http
Access-Control-Allow-Credentials: true
ディレクティブ
true-
サーバーはオリジン間 HTTP リクエストに資格情報を添付することを許可します。 このヘッダーの有効な値はこれのみであり、大文字小文字を区別します。 資格情報が必要ない場合は、値を
falseに設定するのではなく、このヘッダー自体を完全に省略してください。
例
資格情報の許可:
http
Access-Control-Allow-Credentials: true
fetch() を資格情報付きで使用:
js
fetch(url, {
credentials: "include",
});
XMLHttpRequest を資格情報付きで使用:
js
const xhr = new XMLHttpRequest();
xhr.open("GET", "http://example.com/", true);
xhr.withCredentials = true;
xhr.send(null);
仕様書
| Specification |
|---|
| Fetch> # http-access-control-allow-credentials> |