旗下导航:搜·么
当前位置:网站首页 > PHP教程 > 正文

php跨域的几种体式格局【php教程】

作者:搜搜PHP网发布时间:2019-11-26分类:PHP教程浏览:121


导读:PHP完成跨域的几种情势1、JSONP(JSONwithpadding)道理应用html内里script标签能够加载其他域下的js这一特征,运用scriptsrc...

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('<h1>404 Not Found</h1>')
        }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视频教程

以上就是php跨域的几种体式格局的细致内容,更多请关注ki4网别的相干文章!

标签:PHP跨域