JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

HTML5とCORSを活用してWebブラウザで別ドメインの制限付きリソースへアクセスする方法

CORS(Cross-Origin Resource Sharing:オリジン間リソース共有)とは、Webブラウザ上で、別のドメイン(オリジン)から提供される制限付きリソースへのアクセスを許可するための仕組みです。通常、ブラウザはセキュリティ上の理由から「同一オリジンポリシー」によって異なるドメイン間の通信をブロックしますが、CORSを利用することでサーバー側が明示的に許可した相手に対してのみ、リソースの共有が可能になります。

具体例:HTML5動画プレーヤーとカメラへのアクセス

たとえば、HTML5デモセクションにある動画プレーヤーをクリックすると、カメラへのアクセス許可を求めるダイアログが表示されます。ユーザーがこの権限を許可した場合のみカメラが起動し、許可しなければWebアプリケーションはカメラにアクセスできません。このように、CORSはユーザーの同意のもとでクロスドメインのリソース利用を安全に実現するための重要な役割を担っています。

主要ブラウザにおけるCORSの実装方式

CORSリクエストの実装方法はブラウザによって異なります。Chrome、Firefox、Opera、Safariといったモダンブラウザでは XMLHttpRequest2 オブジェクトを使用し、Internet Explorerでは類似機能を持つ XDomainRequest オブジェクトを使用します。

以下のコードは、ブラウザの対応状況を判定しながらCORSリクエストオブジェクトを生成する汎用的な関数です。

function createCORSRequest(method, url) {
    var xhr = new XMLHttpRequest();
    if ("withCredentials" in xhr) {
        // XMLHttpRequestオブジェクトに"withCredentials"プロパティが
        // 存在するかチェックする。
        // "withCredentials"はXMLHttpRequest2オブジェクトにのみ存在する。
        xhr.open(method, url, true);
    }
    else if (typeof XDomainRequest != "undefined") {
        // それ以外の場合はXDomainRequestの有無を確認する。
        // XDomainRequestはIEにのみ存在し、IEにおける
        // CORSリクエストの実現方法である。
        xhr = new XDomainRequest();
        xhr.open(method, url);
    }
    else {
        // いずれにも該当しない場合、
        // ブラウザはCORSに対応していない。
        xhr = null;
    }
    return xhr;
}
var xhr = createCORSRequest('GET', url);
if (!xhr) {
    throw new Error('CORS not supported');
}

ポイント解説

  • withCredentials プロパティ: XMLHttpRequest2にのみ存在するプロパティで、その有無を確認することでモダンブラウザかどうかを判別できます。
  • XDomainRequest: Internet Explorer独自のオブジェクトであり、旧IE環境向けのフォールバックとして使用します。
  • 非対応ブラウザ: どちらも利用できない場合は null を返し、「CORS not supported」エラーとして処理します。

なお、現在ではXDomainRequestをサポートする旧版Internet Explorerはすでにサポート終了となっているため、実際の開発では標準のXMLHttpRequestやfetch APIを使用すれば十分です。ただし、レガシーシステムの保守などで旧IEに対応する必要がある場合には、このようなフォールバック処理が依然として有用です。また、サーバー側では Access-Control-Allow-Origin ヘッダーなどを適切に設定することで、どのオリジンからのアクセスを許可するかを制御できます。

  1. HTML5のlocalStorage APIを使ってブラウザにデータを保存する方法

    HTML5 localStorageとは HTML5のlocalStorageは、文字列データをブラウザ内に保存し、現在のセッションが終了してもデータを保持し続けることができる仕組みです。localStorageは有効期限なしでデータを保存します。一方、sessionStorageはセッション中のみ有効であり、ブラウザを閉じると保存されたデータは失われます。 localStorageの用途と特徴 ローカルストレージは、複数のウィンドウ間で共有でき、セッションをまたいでもデータが持続するストレージとして設計されています。特に、Webアプリケーションではパフォーマンス向上のために、ユーザーが作成

  2. ターミナルからWeb検索ができる「S」の使い方

    ターミナルで作業をしている最中に、特定のサイトで情報を調べたくなることはよくあります。そのたびにターミナルを離れてブラウザを起動するのは面倒ですよね。「S(S-Search)」を使えば、そんな手間を省き、コマンド一つで直接Web検索ができるようになります。 ターミナルからWeb検索を可能にするツールはSだけではありませんが、Sの魅力は、主要な検索エンジンやサイトを最初から十数種類サポートしている点にあります。検索を実行すると、結果はターミナル内ではなく、デフォルトのブラウザに表示されます。この記事では、Google、Amazon、DebianPKG、IMDBなど、さまざまなサイトをターミナル