溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP實現跨域的方式有哪些

發布時間:2020-11-06 11:18:20 來源:億速云 閱讀:250 作者:小新 欄目:編程語言

PHP實現跨域的方式有哪些?這個問題可能是我們日常學習或工作經常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家帶來的參考內容,讓我們一起來看看吧!

PHP實現跨域的幾種形式

1、JSONP(JSON with padding)原理

利用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>

當script src請求到達后端后,后端會去解析callback這個參數,獲取到字符串showData,在發送數據后端返回數據,用showData封裝一下,即showData({"json數據"}) ,前端script標簽在加載數據后,會把json數據作為showData的參數,調用函數運行。

2、CORS

CORS全稱是跨域資源共享(Cross-Origin Resource Sharing),是一種 ajax 跨域請求資源的方式,支持現代瀏覽器,IE支持10以上。

實現方式:

當使用XMLHttpRequest發送請求時,瀏覽器發現該請求不符合同源策略,會給該請求加一個請求頭:Origin,后臺進行一系列處理,如果確定接受請求,則在返回結果中加入一個響應頭:Access-Control-Allow-Origin;瀏覽器判斷該相應頭中,是否包含Origin的值,如果有,則瀏覽器會處理響應,我們就可以拿到響應數據,如果不包含,瀏覽器直接駁回,這時,我們無法拿到響應數據。

實例:

server.js

var http = require('http')
var fs = require('fs')
var path = require('path')
var url = require('url')http.createServer(function(req, res){
var pathObj = url.parse(req.url, true)

  switch (pathObj.pathname) {
    case '/getNews':
      var news = [
        "第11日前瞻:中國沖擊4金 博爾特再戰200米羽球",
        "正直播柴飚/洪煒出戰 男雙力爭會師決賽",
        "女排將死磕巴西!郎平安排男陪練模仿對方核心"
        ]

      res.setHeader('Access-Control-Allow-Origin','http://localhost:8080')
      //res.setHeader('Access-Control-Allow-Origin','*')
      res.end(JSON.stringify(news))
      break;
    default:
      fs.readFile(path.join(__dirname, pathObj.pathname), function(e, data){
        if(e){
          res.writeHead(404, 'not found')
          res.end('<h2>404 Not Found</h2>')
        }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>
  $('.show').addEventListener('click', function(){
    var xhr = new XMLHttpRequest()
    xhr.open('GET', 'http://127.0.0.1:8080/getNews', true)
    xhr.send()
    xhr.onload = function(){
      appendHtml(JSON.parse(xhr.responseText))
    }
  })
  function appendHtml(news){
    var html = ''
    for( var i=0; i<news.length; i++){
      html += '<li>' + news[i] + '</li>'
    }
    $('.news').innerHTML = html
  }
  function $(selector){
    return document.querySelector(selector)
  }
  </script>
  </html>

3、postMessage

假設有兩個域名(主域域名不一致),其中iframe頁面是允許訪問調用,那么就可以用postMessage實現。

原理:a域名發送請求postMessage,b域名間聽到了message事件,就處理并返回數據

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

感謝各位的閱讀!看完上述內容,你們對PHP實現跨域的方式有哪些大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女