Heim  >  Artikel  >  Backend-Entwicklung  >  Mehrere Möglichkeiten für domänenübergreifendes PHP

Mehrere Möglichkeiten für domänenübergreifendes PHP

王林
王林Original
2019-09-21 17:55:447425Durchsuche

Mehrere Möglichkeiten für domänenübergreifendes PHP

Verschiedene Formen der domänenübergreifenden Implementierung in PHP

1. JSONP-Prinzip (JSON mit Polsterung)

Verwenden Sie das script-Tag in HTML, um js in andere Domänen zu laden, und verwenden Sie script src, um Daten in anderen Domänen abzurufen. Da es jedoch über Tags eingeführt wird, Deshalb , werden die angeforderten Daten im JSON-Format als js ausgeführt und verarbeitet. Offensichtlich funktioniert dieser Vorgang nicht.

Daher ist es notwendig, die zurückgegebenen Daten im Voraus zu packen und zur Operation und Verarbeitung in eine Funktion zu kapseln. Der Funktionsname wird über die Schnittstellenparameter an das Backend übergeben Funktionsname, er wird im Original verwendet Verbinden Sie diesen Funktionsnamen mit den Daten und senden Sie ihn an das Frontend. (JSONP erfordert die Mitarbeit des Backends der entsprechenden Schnittstelle zur Implementierung)

Beispiel:

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

Wenn die Skript-SRC-Anfrage das Backend erreicht , das Backend Es analysiert den Rückrufparameter, ruft die Zeichenfolge showData ab, gibt die Daten nach dem Senden der Daten zurück und kapselt sie mit showData({"json data"}, nachdem das Front-End-Skript-Tag geladen wurde Für die Daten werden die JSON-Daten als Parameter von showData verwendet und die auszuführende Funktion aufgerufen.

2. CORS

Der vollständige Name von CORS ist domänenübergreifende Ressourcenfreigabe (Cross-Origin Resource Sharing), was eine Möglichkeit zum Anfordern ist Ressourcen über Ajax-Domänen hinweg, unterstützt moderne Browser, IE unterstützt 10 und höher.

Implementierungsmethode:

Bei Verwendung von XMLHttpRequest zum Senden einer Anfrage stellt der Browser fest, dass die Anfrage nicht der Same-Origin-Richtlinie entspricht, und fügt eine Anfrage hinzu Header zur Anfrage: Origin, eine Reihe von Verarbeitungen werden im Hintergrund ausgeführt. Wenn festgestellt wird, dass die Anfrage akzeptiert wird, wird dem Rückgabeergebnis ein Antwortheader hinzugefügt: Access-Control-Allow-Origin; Wenn dies der Fall ist, können wir die Antwortdaten nach der Verarbeitung abrufen. Wenn sie nicht enthalten sind, können wir sie zu diesem Zeitpunkt nicht abrufen.

Instanz:

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

Angenommen, es gibt zwei Domänennamen (die Hauptdomänennamen sind inkonsistent) und die Iframe-Seite ermöglicht Zugriffsaufrufe, dann kann dies mit postMessage implementiert werden.

Prinzip: Ein Domänenname sendet eine Anfrage für postMessage, und der Domänenname B hört das Nachrichtenereignis und verarbeitet die Daten und gibt sie zurück

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

Der obige Inhalt dient nur als Referenz!

Empfohlenes Tutorial: PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonMehrere Möglichkeiten für domänenübergreifendes PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn