crossorigin属性

JavaScriptや画像などを、他のサーバから利用する時は留意が必要な時があります。

本ページでは、crossorigin属性について説明します。

crossorigin属性とは

JavaScriptや画像などは、他のドメインから読み込むことができます。この読み込むドメインが違うことを、クロスオリジンと呼びます。また、クロスオリジンで利用することをCORS(Cross-Origin Resource Sharing)と言います。

CORSはリスクが発生することがあり、一部利用に制限があります。crossorigin属性を使うと、この制限がなく使えるようになります。crossorigin属性は、audio、img、link、script、video要素で使えます。

crossorigin属性は、以下の値が使えます。

【crossorigin属性の値】
説明
anonymous 認証情報を送信しません。
use-credentials 認証情報を送信します。

値が空(crossorigin=""と指定)の場合や、crossoriginだけ指定した場合もanonymousとして扱われます。

crossorigin属性は、リスクがある処理の時(例えばimgの画像をcanvasで使う)に必要です。通常のスクリプトやimg要素で画像を表示するだけであれば、crossoriginを指定しなくても使えます。

利用例

以下は、crossorigin属性を使ったscript要素の例です。

【crossorigin属性を使ったscript要素の例】
<script src="https://example.com/script.js" crossorigin></script>

上記は、デフォルトのanonymousが指定されたのと同じになります。認証情報を送信しません。

以下は、use-credentialsを指定する時の例です。

【use-credentialsを指定する時の例】
<script src="https://example.com/script.js" crossorigin="use-credentials"></script>

上記により、認証情報を送信します。

オリジンと資格情報の補足

オリジンは、正確にはプロトコル(スキーム) + ドメイン + ポート番号で判断されます。

プロトコルとは、HTTPS(Hypertext Transfer Protocol Secure)などの通信手順です。ブラウザのアドレス欄でhttps://example.comと入力する時のhttpsが該当します。

ポート番号は、サービスを示します。HTTPSであれば443など、一般的な決まりに従う場合は指定が不要です。サーバ側で設定すれば、3000など違う番号も使えます。その時は、ブラウザでhttps://example.com:3000など、最後にポート番号を付けて入力する必要があります。

このオリジンが異なる間でデータなどを共有することが、CORSになります。CORSでは、セキュリティの観点などから一部制限がありますが、crossoriginを指定することで制限なく利用できるようになります。

データを提供するオリジン側が認証を必要とする場合、crossoriginをuse-credentialsにします。use-credentialsにすると、通信中に認証情報も送信します。

いずれの場合も、データを提供するオリジン側で、データを共有することを許可する設定になっている必要があります。

HTML要素(タグ)一覧」に戻る