Les demandes de données interdomaines sont une exigence commune dans le développement frontal moderne. En raison des restrictions de politique de sécurité du navigateur, la page ne peut pas obtenir directement des données à partir de différents noms de domaine, protocoles ou ports, et la communication inter-domaine est devenue un problème urgent à résoudre. Cet article présentera les méthodes de mise en œuvre de deux solutions de transmission inter-domaines traditionnelles autour du langage PHP.
"La politique d'origine homosexuelle" est un mécanisme important utilisé par les navigateurs pour assurer la sécurité. Il faut que le protocole, le nom de domaine et le port de la page soient cohérents avec la page actuelle afin d'accéder normalement aux ressources du serveur. Par exemple, si l'adresse de la page est: http://www.example.com/index.html, alors:
JSONP (JSON avec rembourrage) est une méthode d'acquisition de données interdomaines basée sur des balises de script. Étant donné que la balise de script n'est pas limitée par la politique d'origine même, elle peut être utilisée pour demander des données à d'autres noms de domaine, puis obtenir la valeur de retour via la fonction de rappel.
<script type="text/javascript">
function jsonpCallback(data){
alert(data);
}
</script>
<script type="text/javascript" src="http://www.domain2.com/data.php?callback=jsonpCallback"></script>
Le code PHP côté serveur est le suivant:
<?php
$data = array('name' => 'Q.syr', 'age' => 24);
echo $_GET['callback'] . '(' . json_encode($data) . ')';
?>
Cette méthode ne prend en charge que les demandes GET et est facile à utiliser, mais présente également des risques de sécurité, tels que le risque d'attaques XSS.
CORS (partage de ressources croisées) est une norme formulée par le W3C. Il permet aux serveurs de déclarer quels noms de domaine peuvent accéder aux ressources en définissant les en-têtes de réponse. Il s'agit actuellement d'une méthode de traitement entre domaine plus sécurisé et plus générale.
header('Access-Control-Allow-Origin:*');
header('Access-Control-Allow-Methods:POST,GET');
header('Access-Control-Allow-Headers:x-requested-with,content-type');
illustrer:
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();
Cette méthode prend en charge plusieurs méthodes HTTP et est hautement sécurisée, mais le backend doit coopérer avec la définition de l'en-tête de réponse.
Les deux méthodes ont leurs propres caractéristiques:
Cet article explique en profondeur deux solutions traditionnelles pour PHP pour mettre en œuvre la communication inter-domaine - JSONP et CORS. Les développeurs peuvent choisir la méthode de mise en œuvre la plus appropriée en fonction des besoins réels du projet, de la compatibilité du navigateur, de la sécurité et d'autres facteurs. Si vous poursuivez la sécurité et la flexibilité, il est recommandé de donner la priorité à la méthode CORS pour le traitement du domaine croisé.