クロスドメインのデータ要求は、最新のフロントエンド開発における一般的な要件です。ブラウザのセキュリティポリシーの制限により、ページは異なるドメイン名、プロトコル、またはポートからデータを直接取得することはできません。また、ドメインクロス通信は解決すべき緊急の問題になりました。この記事では、PHP言語をめぐる2つの主流のクロスドメイン伝送ソリューションの実装方法を紹介します。
「同種ポリシー」は、セキュリティを確保するためにブラウザが使用する重要なメカニズムです。ページのプロトコル、ドメイン名、およびポートは、通常のリソースに通常アクセスするために現在のページと一致する必要があります。たとえば、ページアドレスが次の場合:http://www.example.com/index.html、次の場合:
JSONP(パディング付きJSON)は、スクリプトタグに基づくクロスドメインデータ収集方法です。スクリプトタグは同じオリジンポリシーによって制限されていないため、他のドメイン名からデータを要求し、コールバック関数を介して返品値を取得するために使用できます。
<script type="text/javascript">
function jsonpCallback(data){
alert(data);
}
</script>
<script type="text/javascript" src="http://www.domain2.com/data.php?callback=jsonpCallback"></script>
サーバー側のPHPコードは次のとおりです。
<?php
$data = array('name' => 'Q.syr', 'age' => 24);
echo $_GET['callback'] . '(' . json_encode($data) . ')';
?>
この方法は、GETリクエストのみをサポートし、使いやすいだけでなく、XSS攻撃のリスクなどのセキュリティリスクもあります。
CORS(クロスオリジンリソース共有)は、W3Cによって定式化された標準です。これにより、サーバーは応答ヘッダーを設定してリソースにアクセスできるドメイン名を宣言できます。現在、より安全で一般的なクロスドメイン処理方法です。
header('Access-Control-Allow-Origin:*');
header('Access-Control-Allow-Methods:POST,GET');
header('Access-Control-Allow-Headers:x-requested-with,content-type');
説明:
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
var responseText = xmlhttp.responseText;
console.log(responseText);
}
}
xmlhttp.open('GET', 'http://www.domain2.com/data.php', true);
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xmlhttp.send();
この方法は複数のHTTPメソッドをサポートし、非常に安全ですが、バックエンドは応答ヘッダーの設定に協力する必要があります。
2つの方法には独自の特性があります。
この記事では、クロスドメイン通信を実装するためのPHPの2つの主流のソリューションについて説明します - JSONPとCORS。開発者は、プロジェクトの実際のニーズ、ブラウザの互換性、セキュリティ、その他の要因に基づいて、最も適切な実装方法を選択できます。セキュリティと柔軟性を追求する場合は、クロスドメイン処理のCORSメソッドを優先することをお勧めします。