php 跨域读php_php跨域的几种方式

8a224574667230d682077b4301316327.png

PHP实现跨域的几种形式

1、JSONP(JSON with padding)原理

利用html里面script标签可以加载其他域下的js这一特性,使用script src的形式来获取其他域下的数据,但是,因为是通过标签引入的,所以,会将请求到的JSON格式的数据作为js去运行处理,显然这样运行是不行的。

因此,就需要提前将返回的数据包装一下,封装成函数进行运行处理,函数名通过接口传参的方式传给后台,后台解析到函数名后在原始数据上包裹这个函数名,发送给前端。(JSONP 需要对应接口的后端的配合才能实现)

实例:

console.log(ret);

}

当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.jsvar 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('

404 Not Found

')

}else{

res.end(data)

}

})

}}).listen(8080)

index.html

show news

3、postMessage

假设有两个域名(主域域名不一致),其中iframe页面是允许访问调用,那么就可以用postMessage实现。

原理:a域名发送请求postMessage,b域名间听到了message事件,就处理并返回数据//b域名

//*号表示在任何域下都可以接收message

window.addEventListener('message', function(e){

console.log(e.data);

});

以上内容仅供参考!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值