ホームページ  >  記事  >  バックエンド開発  >  PHP がクロスドメイン データ インタラクションを実装する方法

PHP がクロスドメイン データ インタラクションを実装する方法

WBOY
WBOYオリジナル
2023-06-27 08:21:061158ブラウズ

現代のネットワーク技術の継続的な発展により、Web アプリケーションは人々の日常生活に不可欠な部分になりました。ただし、Web アプリケーションのセキュリティ制限とブラウザの同一生成元ポリシーの制限により、これらのアプリケーションはデータを操作する際にいくつかの困難に直面します。最も一般的な問題の 1 つは、クロスドメインのデータ対話です。

クロスドメインのデータ対話では、Web アプリケーションはさまざまなソースからデータを取得して操作する必要があります。 CORS (Cross-Origin Resource Sharing) や JSONP (JSON with Padding) などのクロスドメイン テクノロジーは最新のブラウザーですでにサポートされていますが、場合によっては、Web 開発で一般的に使用されるバックエンド言語として PHP が依然としてサポートされている必要があります。非常に重要な役割を果たしており、クロスドメインのデータ対話を実現するために重要な役割を果たしています。

この記事では、PHP を使用してクロスドメインのデータ対話を実現する方法を紹介し、いくつかの一般的なソリューションについて説明します。

クロスドメイン データ インタラクションの種類

PHP を使用してクロスドメイン データ インタラクションの実装を開始する前に、まずクロスドメイン データ インタラクションの種類を理解する必要があります。

CORS

CORS (Cross-Origin Resource Sharing) は、Web アプリケーションがさまざまなソースからデータにアクセスできるようにする、最新のブラウザーでサポートされているメカニズムです。 CORS クロスドメイン リクエストは、事前定義された標準 HTTP ヘッダーを介してリクエストが許可されるかどうかをブラウザーに伝えます。 CORS クロスオリジン要求の場合、サーバーは応答に特定の応答ヘッダーを追加して、どの要求が受け入れられるかをブラウザーに伝える必要があります。

JSONP

JSONP (JSON with Padding) は、ブラウザーの同一オリジン ポリシーをバイパスできるテクノロジーであり、タグの src 属性が制限されないという事実を利用します。同一生成元ポリシー。 JSONP リクエストはブラウザーによってクロスドメインリクエストとはみなされないため、他のドメインのデータに直接アクセスできます。

JSONP リクエストの原則は、script タグをページに追加し、タグの src 属性が URL を指すことです。 URL はサーバーによって提供され、JavaScript コードを返します。コードが実行されると、指定されたコールバック関数が呼び出され、サーバーから返されたデータがパラメーターとしてコールバック関数に渡されます。

JSONP はシンプルさと使いやすさが特徴ですが、XSS (クロスサイト スクリプティング攻撃) に対して脆弱です。

その他

さらに、透明画像 (Transparent Image)、クロスフレーム メッセージング (Cross Document Messaging) など、他のいくつかのクロスドメイン データ インタラクション テクノロジーもあります。しかし、これらの技術はまだ成熟しておらず、使用条件も厳しいため、実際の開発ではあまり活用されていません。

PHP はクロスドメイン データ インタラクションを実装します

実際の開発では、状況に応じてさまざまなクロスドメイン テクノロジを使用できます。いくつかの一般的な PHP クロスドメイン テクノロジを以下に紹介します。

CORS

PHP で CORS を使用するには、応答ヘッダーを設定する必要があります。たとえば、すべてのドメイン名にサーバー上のデータへのアクセスを許可するには、次のコードを使用できます。

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

特定のドメイン名のみにサーバー上のデータへのアクセスを許可する場合は、次のコードを使用できます。

header("Access-Control-Allow-Origin: http://example.com");

http://example.com は、サーバー上のデータへのアクセスを許可するドメイン名です。

クロスドメイン アクセスに Cookie を使用する必要がある場合は、サーバー側で Access-Control-Allow-Credentials を true に設定する必要もあることに注意してください。例:

header('Access-Control-Allow-Origin: http://example.com');
header('Access-Control-Allow-Credentials: true');

JSONP

CORS とは異なり、JSONP クロスドメイン リクエストはスクリプト タグを追加することで実装されます。 PHP では、データを JavaScript コードにラップし、クライアントが提供するコールバック関数名に従ってデータを返すときにコールバック関数を呼び出す必要があります。例:

<?php
    $data = array("name" => "John", "age" => 30);
    $callback = $_GET['callback'];
    echo $callback . '(' . json_encode($data) . ')';
?>

上記のコードでは、$_GET['callback'] はクライアントによって提供されたコールバック関数名を取得します。

サーバーがデータを返すときは、データを JavaScript コードに正しくラップしてコールバック関数を呼び出す必要があることに注意してください。そうしないと、クライアントはデータを正しく受信できません。

概要

一般的に使用されるバックエンド言語として、PHP はさまざまなクロスドメイン データ交換ソリューションを提供します。実際の開発では、特定のニーズに基づいて適切なソリューションを選択する必要があります。クロスドメインのデータ対話を扱うときは、クロスサイト スクリプティング攻撃などのセキュリティ問題を回避するために、セキュリティ問題に注意する必要があることに注意してください。

以上がPHP がクロスドメイン データ インタラクションを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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