クロスドメイン PHP のいくつかの方法

王林
リリース: 2023-04-07 12:50:02
オリジナル
7363 人が閲覧しました

クロスドメイン PHP のいくつかの方法

PHP におけるクロスドメイン実装のいくつかの形式

##1. JSONP (パディング付き JSON) 原則

HTML の script タグを使用して他のドメインの js を読み込み、script src を使用して他のドメインのデータを取得しますが、タグを通じて導入されているため、つまり、要求された JSON 形式のデータは js として実行および処理されますが、明らかに、この操作は機能しません。

したがって、返されたデータを事前にパッケージ化し、処理を実行するための関数にカプセル化する必要があります。関数名は、インターフェイスのパラメータ転送メソッドを通じてバックグラウンドに渡されます。バックグラウンドで解析した後、関数名。元の関数で使用されます。 この関数名をデータにラップしてフロントエンドに送信します。 (JSONP を実現するには、対応するインターフェイスのバックエンドの協力が必要です)

例:

<script>function showData(ret){
console.log(ret);
}</script><script src="http://api.jirengu.com/weather.php?callback=showData"></script>
ログイン後にコピー

スクリプト src リクエストがバックエンドに到達したとき、バックエンド コールバック パラメーターを解析し、文字列 showData を取得し、データの送信後にデータを返し、showData (つまり showData({"json data"}) でカプセル化します。フロントエンド スクリプト タグが読み込まれた後)データを取得すると、json データを showData のパラメータとして使用し、関数を呼び出して実行します。

2. CORS

CORS の正式名は、クロスオリジン リソース共有 (

Cross-Origin Resource Sharing) です。 )、これは最新のブラウザをサポートする ajax クロスドメイン リソース リクエスト メソッドであり、IE は 10 以降をサポートします。

実装方法:

XMLHttpRequest を使用してリクエストを送信すると、ブラウザはリクエストが同一オリジン ポリシーに準拠していないことを検出します。 Aリクエストヘッダ:Originを追加し、一連の処理がバックグラウンドで行われ、リクエストが受け付けられたと判断された場合、戻り結果にレスポンスヘッダ:Access-が追加されます。 Control-Allow-Origin; ブラウザは、対応するヘッダーに Origin の値が含まれているかどうかを判断します。そうである場合、ブラウザは応答を処理し、応答データを取得できます。そうでない場合、ブラウザは直接拒否します。今回は応答データを取得できません。

例:

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

2 つのドメイン名があり (メイン ドメインのドメイン名が一致していない)、iframe ページが呼び出しへのアクセスを許可されていると仮定すると、次のようになります。 postMessageで実装されています。

原則: a ドメイン名は postMessage のリクエストを送信し、b ドメイン名はメッセージ イベントを受信し、データを処理して返します

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

上記の内容はあくまで参考です!

推奨チュートリアル:

PHP ビデオ チュートリアル

以上がクロスドメイン PHP のいくつかの方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!