ホームページ >バックエンド開発 >PHPの問題 >クロスドメインアクセスとは何ですか? PHPを使用してアクセス権限を設定する方法

クロスドメインアクセスとは何ですか? PHPを使用してアクセス権限を設定する方法

PHPz
PHPzオリジナル
2023-04-04 18:21:392540ブラウズ

クロスドメイン アクセスの問題は、フロントエンド開発における一般的な問題です。 Ajax を介して別の異なるドメインからリソースをリクエストしたり、Web ページやアプリケーションでリソースを取得したりすると、クロスドメイン アクセスの問題が発生します。関連するアクセス許可を設定しない場合、この種のクロスドメイン アクセスはブラウザによって許可されません。この記事では、PHPを使用してクロスドメインアクセス権限を設定する方法を紹介します。

1. クロスドメイン アクセスとは何ですか?

クロスドメイン アクセスとは、1 つのドメイン内の Web ページが他のドメイン内の Web リソース (スクリプト、スタイル シート、画像など) にアクセスすることを指します。別のドメイン)。クロスドメイン アクセスにはブラウザのセキュリティ メカニズムが関与しており、セキュリティ上の理由から制限されています。

Ajax を使用するか、Web ページでフェッチして別のドメインの Web リソースをリクエストすると、クロスドメインの問題が発生します。ブラウザーは、「オリジン 'http://xyz.com' からの 'http://abc.com/api/getdata' の XMLHttpRequest へのアクセスが CORS ポリシーによってブロックされました」のようなエラー メッセージをコンソールに出力します。ドメイン要求がブラウザによってインターセプトされました。

2. クロスドメイン アクセス許可を設定する必要がある理由

Web アプリケーションのセキュリティを確保するために、ブラウザーはクロスドメイン リクエストを制限します。関連するクロスドメイン アクセス許可を設定しない場合、ブラウザによってクロスドメイン リクエストが禁止され、対応するデータを取得できなくなります。フロントエンドとバックエンドが分離されている一部のアプリケーションや、API インターフェイスにアクセスする必要があるアプリケーションでは、クロスドメイン リクエストの制限がボトルネックとなり、Web アプリケーションの通常の動作に影響を与えます。

3. PHP でクロスドメイン アクセス許可を設定する方法

PHP はサーバーサイド スクリプト言語に基づいた Web 開発言語であり、PHP でクロスドメイン アクセス許可を設定できます。 PHPでクロスドメインアクセス権限を設定する方法を紹介します。

1. header() 関数を使用してクロスドメイン リクエスト ヘッダーを設定する

PHP で header() 関数を使用して、クロスドメイン リクエスト ヘッダーを設定できます。いわゆるクロスドメイン リクエスト ヘッダーは、HTTP プロトコルの「Access-Control-Allow-Origin」ヘッダーであり、その機能は、リクエストがクロスドメイン アクセスを許可されているかどうかをブラウザーに伝えることです。

以下はサンプル コードです:

header('Access-Control-Allow-Origin: *');

このコードは、「Access-Control-Allow-Origin」ヘッダーを設定するために使用され、そのパラメーターは「」です。これは意味します。どのドメインでもリソースへのアクセスが許可されていること。もちろん、「」を指定したドメイン名に置き換えて、特定のドメイン名のみがリソースへのアクセスを許可されることを示すこともできます。

2. 他のクロスドメイン リクエスト ヘッダーを設定する

「Access-Control-Allow-Origin」ヘッダーに加えて、「Access」などの他のクロスドメイン リクエスト ヘッダーがいくつかあります。 -Control-Allow-Credentials」、「Access-Control-Allow-Methods」、「Access-Control-Allow-Headers」など。次のようなコードを使用して設定できます:

header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: X-Requested-With, Content-Type, Authorization');

これらのヘッダーの意味は次のとおりです:

  • Access-Control-Allow-Credentials: 認証情報を許可するかどうかをブラウザーに指示します。 Cookie などのリソースへのアクセス要求。
  • Access-Control-Allow-Methods: このリソースでサポートされている HTTP メソッドをブラウザに伝えます。
  • Access-Control-Allow-Headers: このリソースでサポートされている HTTP リクエスト ヘッダーをブラウザーに伝えます。

3. プリフライト リクエストの処理

Socket.IO は実際には HTTP の亜種であるなど、ブラウザがいくつかの HTTP リクエストを送信するとき、単純なリクエスト (GET、 POST)、複雑なリクエスト (PUT、DELETE、OPTIONS など) を実行することもできます。複雑なリクエストの場合、ブラウザは最初に OPTIONS リクエストを送信して、クロスドメイン リクエストを許可するかどうかをサーバーに問い合わせます。このとき、サーバーは対応する応答ヘッダーを返す必要があります。この応答ヘッダーでは、次のように設定できます:

  • Access-Control-Allow-Origin: クロスドメイン リクエストを許可するソースを示します ( * を使用してすべてのサポートを表すこともできます)。
  • Access-Control-Allow-Headers: サポートされているリクエスト ヘッダーを示します。
  • Access-Control-Allow-Methods: クロスドメイン要求をサポートするメソッドを示します。

以下は、プリフライト リクエストを処理するためのサンプル コードです:

if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
    header('Access-Control-Allow-Origin: *');
    header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
    header('Access-Control-Allow-Headers: X-Requested-With, Content-Type, Authorization');
    exit;
}

このコードは、「Access-Control-Allow-Methods」、「Access」が含まれる OPTIONS リクエストを処理するために使用されます。 -Control-Allow-Headers」およびその他のクロスドメイン要求ヘッダー。

4. 概要

PHP を通じてクロスドメイン アクセス許可を設定すると、フロントエンド開発におけるクロスドメインの問題を解決できます。 PHP の header() 関数を使用してクロスドメイン リクエスト ヘッダーを設定できます。また、ビジネス ニーズを満たすために他のクロスドメイン リクエスト ヘッダーを設定することもできます。プリフライト リクエストを処理するときは、リソースがクロスオリジン リクエストをサポートしているかどうかをブラウザーに伝えるために、対応する応答ヘッダーを返す必要があります。上記の手順により、クロスドメインの問題を効果的に解決し、Web アプリケーションの正常な動作を保証できます。

以上がクロスドメインアクセスとは何ですか? PHPを使用してアクセス権限を設定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。