Maison  >  Article  >  développement back-end  >  Plusieurs façons de php inter-domaines

Plusieurs façons de php inter-domaines

王林
王林original
2019-09-21 17:55:447448parcourir

Plusieurs façons de php inter-domaines

Plusieurs formes d'implémentation inter-domaines en PHP

Principe JSONP (JSON avec remplissage)

Utilisez la balise script en HTML pour charger js dans d'autres domaines, et utilisez le script src pour obtenir des données dans d'autres domaines Cependant, comme elle est introduite via des balises, Par conséquent. , les données au format JSON demandées seront exécutées et traitées comme js. Évidemment, cette opération ne fonctionnera pas.

Par conséquent, il est nécessaire de conditionner les données renvoyées à l'avance et de les encapsuler dans une fonction pour le fonctionnement et le traitement. Le nom de la fonction est transmis au backend via les paramètres de l'interface. nom de la fonction, il sera utilisé dans l'original Enveloppez ce nom de fonction sur les données et envoyez-le au front-end. (JSONP nécessite la coopération du backend de l'interface correspondante pour être mis en œuvre)

Exemple :

<script>function showData(ret){
console.log(ret);
}</script><script src="http://api.jirengu.com/weather.php?callback=showData"></script>

Lorsque la requête src du script atteint le backend , le backend Il analysera le paramètre de rappel, obtiendra la chaîne showData, renverra les données après l'envoi des données et les encapsulera avec showData, c'est-à-dire showData({"json data"} après le chargement de la balise de script frontal). les données, il utilisera les données json comme paramètres de showData, appellera la fonction à exécuter.

2. CORS

Le nom complet de CORS est le partage de ressources entre domaines (

), qui est un moyen ajax de demander des ressources sur tous les domaines, prend en charge les navigateurs modernes, IE prend en charge 10 et plus. Cross-Origin Resource Sharing

Méthode de mise en œuvre :

Lors de l'utilisation de

pour envoyer une requête, le navigateur constate que la requête n'est pas conforme à la politique de même origine et ajoute une requête en-tête à la requête : XMLHttpRequest, une série de traitements est effectuée en arrière-plan Si la requête est déterminée comme étant acceptée, un en-tête de réponse est ajouté au résultat renvoyé : Origin ; la valeur d'Origin.Si tel est le cas, le navigateur pourra obtenir les données de réponse après avoir traité la réponse. Si elles ne sont pas incluses, le navigateur les rejettera directement. Pour le moment, nous ne pouvons pas obtenir les données de réponse. Access-Control-Allow-Origin

Instance :

server.js

var http = require(&#39;http&#39;)
var fs = require(&#39;fs&#39;)
var path = require(&#39;path&#39;)
var url = require(&#39;url&#39;)http.createServer(function(req, res){
var pathObj = url.parse(req.url, true)

  switch (pathObj.pathname) {
    case &#39;/getNews&#39;:
      var news = [
        "第11日前瞻:中国冲击4金 博尔特再战200米羽球",
        "正直播柴飚/洪炜出战 男双力争会师决赛",
        "女排将死磕巴西!郎平安排男陪练模仿对方核心"
        ]

      res.setHeader(&#39;Access-Control-Allow-Origin&#39;,&#39;http://localhost:8080&#39;)
      //res.setHeader(&#39;Access-Control-Allow-Origin&#39;,&#39;*&#39;)
      res.end(JSON.stringify(news))
      break;
    default:
      fs.readFile(path.join(__dirname, pathObj.pathname), function(e, data){
        if(e){
          res.writeHead(404, &#39;not found&#39;)
          res.end(&#39;<h1>404 Not Found</h1>&#39;)
        }else{
          res.end(data)
        }
      }) 
  }}).listen(8080)

index.html

<!DOCTYPE html><html><body>
  <div class="container">
    <ul class="news"></ul>
    <button class="show">show news</button>
  </div><script>
  $(&#39;.show&#39;).addEventListener(&#39;click&#39;, function(){
    var xhr = new XMLHttpRequest()
    xhr.open(&#39;GET&#39;, &#39;http://127.0.0.1:8080/getNews&#39;, true)
    xhr.send()
    xhr.onload = function(){
      appendHtml(JSON.parse(xhr.responseText))
    }
  })
  function appendHtml(news){
    var html = &#39;&#39;
    for( var i=0; i<news.length; i++){
      html += &#39;<li>&#39; + news[i] + &#39;</li>&#39;
    }
    $(&#39;.news&#39;).innerHTML = html
  }
  function $(selector){
    return document.querySelector(selector)
  }
  </script>
  </html>

3 , postMessage

En supposant qu'il existe deux noms de domaine (les noms de domaine principaux sont incohérents) et que la page iframe autorise l'accès aux appels, elle peut alors être implémentée avec postMessage.

Principe : Un nom de domaine envoie une demande de postMessage, et le nom de domaine B entend l'événement de message, traite et renvoie les données

//b域名<script>window.frames[0].postMessage(this.value, &#39;*&#39;);
//*号表示在任何域下都可以接收message
window.addEventListener(&#39;message&#39;, function(e){
  console.log(e.data);
});</script>

Le contenu ci-dessus est uniquement à titre de référence !

Tutoriel recommandé :

Tutoriel vidéo PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn