クロスドメインの問題は、Web開発において非常に一般的な問題です。特に、フロントエンドとバックエンドの個別のアプリケーションを備えたアプリケーションでは、フロントエンドは異なるドメイン名の下でリソースにアクセスする必要があり、ブラウザはセキュリティ上の理由でデフォルトでクロスドメイン要求をブロックします。この時点で、サーバーは、クロスドメイン要求を許可するためにHTTPヘッダーを設定する必要があります。 PHPでは、 Header()関数を使用して、クロスドメイン関連のヘッダー情報を設定できます。
クロスドメインリソース共有(CORS)は、ブラウザが異なるドメインにリクエストを開始できるようにすることで、クロスドメインの問題を解決するメカニズムです。 CORSは主にHTTPヘッダー、特にアクセス制御オリジンに依存しています。ブラウザが別のドメイン内のサーバーへのリクエストを開始すると、サーバーは応答ヘッダーにアクセスコントロールオリジンを含める必要があります。
Access-Control-Allow-Originは、CORS標準のキーヘッダーであり、リソースにアクセスできるドメイン名を決定します。その価値は、次の場合に可能になります。
* :すべてのドメイン名がリソースにアクセスできることを意味します。
http://m66.net :この指定されたドメイン名のみがリソースにアクセスできます。
null :クロスドメイン要求が許可されていないことを意味します。
たとえば、ドメイン名http://m66.netにクロスドメインリクエストを行うようにする場合は、PHPスクリプトに対応するヘッダーを設定する必要があります。
PHPでは、HTTPヘッダー情報の設定がHeader()関数を介して実装されます。クロスドメインのリクエストを許可するために、最も基本的なステップは、Header()を使用してアクセス制御コントロールオリジンを設定することです。
<?php
// から許可しますhttp://m66.netクロスドメインリクエスト
header("Access-Control-Allow-Origin: http://m66.net");
// 他の人をサポートする必要がある場合HTTP方法(のようにPOST、PUT、DELETE待って),これを設定できます:
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE");
// のように果需要允许携带cookie,次のヘッダーを設定する必要があります
header("Access-Control-Allow-Credentials: true");
// 許可された要求ヘッダーを設定します
header("Access-Control-Allow-Headers: Content-Type, Authorization");
// 実際のアプリケーションで,リクエストのソースドメイン名を決定できます,クロスドメインヘッダーを動的に設定します
$allowedOrigin = "http://m66.net";
if ($_SERVER['HTTP_ORIGIN'] === $allowedOrigin) {
header("Access-Control-Allow-Origin: $allowedOrigin");
}
?>
Access-Control-Allow-Origin :指定されたドメイン名がクロスドメイン要求を行うことを許可します。複数のドメイン名を許可する場合は、リクエストのソースを動的に決定し、異なるドメイン名を設定できます。
Access-Control-Allow-Methods :許可されたHTTPメソッド(GET、投稿など)。
Access-Control-Allow-Credentials :Cookieを送信する必要がある場合は、ヘッダーをTrueに設定する必要があります。
Access-Control-Allow-Headers :許可されたカスタムリクエストヘッダー(コンテンツタイプや承認など)。
ブラウザが複雑なクロスドメインリクエスト(カスタムヘッダーやPut、削除メソッドなどを使用するなど)を開始すると、ブラウザは最初にPreflightリクエストと呼ばれるオプションリクエストを送信します。この要求は、サーバーがクロスドメイン要求を許可するかどうかを確認することです。 Preflightリクエストへの応答では、サーバーは対応するCORSヘッダーを返す必要もあります。
例えば:
<?php
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
// プリフライトリクエストを処理します
header("Access-Control-Allow-Origin: http://m66.net");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE");
header("Access-Control-Allow-Headers: Content-Type, Authorization");
header("Access-Control-Allow-Credentials: true");
exit();
}
?>
オプションリクエストでは実際のデータを返す必要はありませんが、CORSヘッダーを正しく設定して、クロスドメイン要求が許可されているかどうかをブラウザサーバーに伝える必要があります。
PHPのHeader()関数を使用することにより、クロスドメイン関連のHTTPヘッダー、特にアクセスコントロールアローオリジンを簡単に設定して、指定されたドメイン名のクロスドメイン要求を許可できます。実際のニーズに応じて、CORSポリシーを柔軟に構成して、セキュリティと機能のバランスを確保することができます。
クロスドメインリソース共有は、Webアプリケーションでは無視できない問題です。 PHPでCORSヘッダーを構成する方法の習得は、ドメインクロスの問題を解決し、アプリケーションのアクセシビリティとスケーラビリティを改善するのに役立ちます。