各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案

Str Tom,为分享PHP技术和解决方案,贡献一份自己的力量!
收藏本站(不迷路),每天更新好文章!
当前位置:首页 > CMS教程 > PHP

php跨域的几种方式

管理员 2023-09-05
PHP
151

php跨域的几种方式

内容导读

收集整理的这篇技术教程文章主要介绍了php跨域的几种方式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2986字,纯文字阅读大概需要5分钟

内容图文

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, '*');//*号表示在任何域下都可以接收messagewindow.addEventListener('message', function(e){  console.log(e.data);});</script>

以上内容仅供参考!

推荐教程:PHP视频教程

以上就是php跨域的几种方式的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的php跨域的几种方式全部内容,希望文章能够帮你解决php跨域的几种方式所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部