百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

常见跨域解决方案(一)

off999 2025-02-07 18:44 96 浏览 0 评论

什么是跨域

跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。

广义的跨域:

1)资源跳转:A链接、重定向、表单提交

2)资源嵌入:

服务端返回如下(返回时即执行全局函数):

handleCallback({"status": true, "user": "admin"})

2、jquery ajax

$.ajax({
    url: 'http://www.tunan666.com:8080/login',
    type: 'get',
    dataType: 'jsonp',  // 请求方式为jsonp
    jsonpCallback: "handleCallback",    // 自定义回调函数名
    data: {}
});

3、vue.js

this.$http.jsonp('http://www.tunan666.com:8080/login', {
    params: {},
    jsonp: 'handleCallback'
}).then((res) => {
    console.log(res); 
})

4、后端node.js

var querystring = require('querystring');
var http = require('http');
var server = http.createServer();

server.on('request', function(req, res) {
    var params = qs.parse(req.url.split('?')[1]);
    var fn = params.callback;

    // jsonp返回设置
    res.writeHead(200, { 'Content-Type': 'text/javascript' });
    res.write(fn + '(' + JSON.stringify(params) + ')');

    res.end();
});

server.listen('8080');
console.log('Server is running at port 8080...');

jsonp虽然很简单,但是有如下缺点:

1)安全问题:请求代码中可能存在安全隐患

2)要确定jsonp请求是否失败并不容易

3)只能实现get一种请求

二、iframe跨域

1、document.domain + iframe 跨域

此方案仅限主域相同,子域不同的跨域应用场景。

实现原理:两个页面都通过js强制设置document.domain为基础主域,就实现了同域。

1)父窗口:(
http://www.tunan666.com/a.html)


2)子窗口:(
http://child.tunan666.com/b.html)

2、location.hash + iframe 跨域

实现原理:a与b跨域相互通信,通过中间页c来实现。三个页面,不同域之间利用iframe的location.hash传值,相同域之间直接js访问来通信。

具体实现:A域:a.html -> B域:b.html -> A域:c.html,a与b不同域只能通过hash值单向通信,b与c也不同域也只能单向通信,但c与a同域,所以c可通过parent.parent访问a页面所有对象。

1)a.html:(http://www.tunan666.com/a.html)


2)b.html:(http://www.tn666.com/b.html)


3)c.html:(http://www.tunan666.com/c.html)

3、window.name + iframe 跨域

window.name属性的独特之处:name值在不同的页面(甚至不同域名)加载后依旧存在,并且可以支持非常长的 name 值(2MB)。

通过iframe的src属性由外域转向本地域,跨域数据即由iframe的window.name从外域传递到本地域。这个就巧妙地绕过了浏览器的跨域访问限制,但同时它又是安全操作。

1)a.html:(http://www.tunan666.com/a.html)

var proxy = function(url, callback) {
    var state = 0;
    var iframe = document.createElement('iframe');

    // 加载跨域页面
    iframe.src = url;

    // onload事件会触发2次,第1次加载跨域页,并留存数据于window.name
    iframe.onload = function() {
        if (state === 1) {
            // 第2次onload(同域proxy页)成功后,读取同域window.name中数据
            callback(iframe.contentWindow.name);
            destoryFrame();


        } else if (state === 0) {
            // 第1次onload(跨域页)成功后,切换到同域代理页面
            iframe.contentWindow.location = 'http://www.tunan666.com/proxy.html';
            state = 1;
        }
    };

    document.body.appendChild(iframe);

    // 获取数据以后销毁这个iframe,释放内存;这也保证了安全(不被其他域frame js访问)
    function destoryFrame() {
        iframe.contentWindow.document.write('');
        iframe.contentWindow.close();
        document.body.removeChild(iframe);
    }
};

// 请求跨域b页面数据
proxy('http://www.tn666.com/b.html', function(data){
    alert(data);
});

2)proxy.html:(http://www.tunan666.com/proxy….

中间代理页,与a.html同域,内容为空即可。

3)b.html:(http://www.tn666.com/b.html)

三、postMessage跨域

postMessage是HTML5 XMLHttpRequest Level 2中的API,且是为数不多可以跨域操作的window属性之一,它可用于解决以下方面的问题:

1)页面和其打开的新窗口的数据传递

2)多窗口之间消息传递

3)页面与嵌套的iframe消息传递

4)上面三个场景的跨域数据传递

用法:postMessage(data,origin)方法接受两个参数

data:html5规范支持任意基本类型或可复制的对象,但部分浏览器只支持字符串,所以传参时最好用JSON.stringify()序列化。

origin:协议+主机+端口号,也可以设置为"*",表示可以传递给任意窗口,如果要指定和当前窗口同源的话设置为"/"。

1、a.html:(
http://www.tunan666.com/a.html)


2、b.html:(
http://www.tn666.com/b.html)


下一篇文章介绍剩下的几种方法:

4、跨域资源共享(CORS)

5、nginx代理跨域

6、nodejs中间件代理跨域

7、WebSocket协议跨域


敬请期待~

相关推荐

看股市行情下载什么软件好(看股票行情下载什么软件好)

电脑版好用股票软件:1、大智慧证券信息平台:一套用来进行证券行情显示、行情分析、外汇及期货信息,并同时进行信息即时接收的超级证券信息平台。面向证券决策机构和各阶层证券分析、咨询、投资人员,并特别关注...

网络防火墙(网络防火墙品牌前十大排名)

网络防火墙是一种用来加强网络之间访问控制的特殊网络互联设备。计算机流入流出的所有网络通信均要经过此防火墙。防火墙对流经它的网络通信进行扫描,这样能够过滤掉一些攻击,以免其在目标计算机上被执行。防火墙还...

pdf转word有密码怎么办(如果pdf转word要密码)

pdf文件转换成加密word文件的步骤如下:下载并安装一个能够将PDF文件转换成Word文件的软件,如迅捷PDF转换器。打开安装好的软件,点击操作界面的上方菜单栏,选择“PDF操作”菜单下的“PDF转...

手机安装搜狗输入法(手机安装搜狗输入法在哪里)

一、需要准备的工具以索尼XperiaXZ2Compact手机为例二、详细的操作流程1、开始,先在手机的桌面上找到应用程序“搜狗输入法”,点击进入新界面。2、然后,进入到搜狗输入法操作界面后,...

中国移动宽带网速测试平台(在线网速测试)

掌上营业厅如何宽带测速1.点击我的进入掌上营业厅点击我的进入2.点击更多进入我的点击我的服务右侧的更多进入3.点击宽带进入全部应用点击宽带进入4.点击更多进入宽带专区点击更多进入掌上营业厅如何...

怎么下载mp4格式的视频(怎么直接下载mp4格式的视频)

要下载MP4格式视频,首先需要在网上找到视频的链接,然后使用一个视频下载软件或者网站将视频链接粘贴到下载框中,点击下载按钮即可。另外,也可以在浏览器地址栏输入“ss”加视频链接的方式来下载视频。需要注...

pps电视版官方下载(pps网络电视手机版)

建议可以电视和手机同一WiFi里安装悟空遥控器,然后手机下载你需要安装到电视的软件APP,使用手机上的悟空遥控器安装本地APP到电视功能请确认电视已经链接到互联网,再确认电视是否支持网络,如果以上都可...

侠盗猎车手圣安地列斯中文版下载

侠盗飞车圣安地列斯手机版可以在拇指玩或者当乐软件上下载。1、首先下载安装并点击打开拇指玩或当乐客户端。?2、然后我们在搜索侠盗猎车手圣安地列斯,有中/英文版的,建议下中文的版本。然后点击下载,下载完成...

微信网页版下载安装(手机微信网页版登录)
  • 微信网页版下载安装(手机微信网页版登录)
  • 微信网页版下载安装(手机微信网页版登录)
  • 微信网页版下载安装(手机微信网页版登录)
  • 微信网页版下载安装(手机微信网页版登录)
免费游戏软件全免费(免费游戏软件全免费无实名认证)
免费游戏软件全免费(免费游戏软件全免费无实名认证)

根据描述什么游戏不用wifi免费还解压的游戏《建筑破坏原型》这是一款非常有趣的解压破坏小游戏。这款非常解压的休闲小游戏,游戏的玩法简单来说就是使用锤子来进行各种破坏,第一视角的设计会让玩家产生强烈的代入感,而在这款游戏中玩家可以使用各种工具...

2026-01-28 16:03 off999

今日证券股票行情(下周股票热点板块)

一般证券交易系统,尤其是网上的证券交易系统,一般大部分在八九底点都要进行结算,你在结算看到的当天收益实际都是清零的,不会变少了,如果你有这个担心你可以核算一下。按键盘上的“→”键可以实现向右移动,按...

在线mp3剪切器(mp3在线剪切器l)

风云音频处理大师风云音频处理大师是一款相当出色的专业化音频处理软件。小编使用比较多的也是风云音频处理大师,它的功能全面,能够帮助用户快速上手音频剪辑,还可以对音频的噪音进行降噪处理,对音频进行调速、拼...

影视工厂(影视工厂免费)

影视工厂使用方法如下①用户首先需要检查一下当前使用的网络数据是否发生了延迟等现象。必要时可以使用其他的网络线路。②清理一下设备中的储存空间。留出更多的内存让该软件进行运行。③部分软件用户在设备中使用一...

sgreen浏览器(agreen浏览器)
sgreen浏览器(agreen浏览器)

它是一个广告,把360浏览器安装文件夹(文件夹的名字为版本号)下面的errorpage.zip压缩包里面的se_errors.js文件删除就可以屏蔽这个广告最上那个是win10最新的浏览器,Edge浏览器,你问的应该是这个吧,中间这个是Ch...

2026-01-28 15:03 off999

全本小说免费下载txt电子书(余下全文免费阅读app下载)

因为违规了。久久小说网的许多小说,都没有作者的授权而且他的名声太大了,被人给投诉然后违规追究了,就关闭了这个网站。所以平时看小说的时候,尽量到正版的网站去看,一些大网站,或者是一些小网站都可以去瞅一瞅...

取消回复欢迎 发表评论: