Position actuelle: Accueil> Derniers articles> Deux façons de mettre en œuvre des demandes de domaine croisé: JSONP et CORS Explication détaillée

Deux façons de mettre en œuvre des demandes de domaine croisé: JSONP et CORS Explication détaillée

gitbox 2025-06-15

1. Le contexte de la transmission de données inter-domaines

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.

2. Comprendre la stratégie homosexuelle

"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:

  • Le protocole doit être http
  • Le nom de domaine doit être www.example.com
  • Le port doit être le 80 par défaut (lorsque le port n'est pas déclaré)

3. Utilisez JSONP pour les demandes de domaine transversal

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.

4. Politique de partage des ressources CORS CROSS-DOMAIN

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.

4.1 PHP implémente l'en-tête de réponse CORS

 header('Access-Control-Allow-Origin:*');
header('Access-Control-Allow-Methods:POST,GET');
header('Access-Control-Allow-Headers:x-requested-with,content-type');

illustrer:

  • Access-Control-Allow-Origin : La source autorisée à accéder, * signifie que tous les domaines sont accessibles
  • Access-Control-Allow-Methods : Méthodes HTTP autorisées
  • Access-Control-Allow-Headers : Champ d'en-tête de demande autorisée

4.2 Le front-end utilise XMLHttpRequest pour implémenter les demandes de domaine croisé

 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.

5. Comparaison entre JSONP et CORS

Les deux méthodes ont leurs propres caractéristiques:

  • JSONP: l'implémentation est simple, aucune configuration de serveur n'est requise et ne prend en charge que les demandes GET; Il existe des risques de sécurité.
  • CORS: Méthode standard, prend en charge plusieurs types de demandes et mécanismes d'authentification, avec une sécurité élevée; nécessite la configuration de l'en-tête de réponse backend.

6. Résumé

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é.