问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何利用js解决跨域问题 利用header

发布网友 发布时间:2022-05-14 23:02

我来回答

2个回答

懂视网 时间:2022-05-15 03:23

这次给大家带来使用JS怎样实现最简单的跨域,使用JS实现最简单的跨域注意事项有哪些,下面就是实战案例,一起来看一下。

有一天有人跑来跟我定方案,问我cors是什么原理,一脸懵逼,跨域我只知道jsonP啊,眼看一个装逼的机会就要失去了。
“我现在有点忙,待会找你”。
机智的我马上回到工位,百度百度百度。

同源策略

老生常谈了,不是我家的人,东西当然不能让你随便乱动。
非同源的脚本不能访问或者操作其他域的页面对象(如DOM等),同源策略要求三同, 即: 同域, 同协议, 同端口。

跨域方法

本文只介绍jsonP和cors。

jsonP

<!-- 开发环境版本,包含了用帮助的命令行警告 --><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

这是vue文档中引入vue.js的方法,可以看到script标签可以直接去请求其他域的JS文件。既然这样,我们就能使用这个特性来实现跨域。

搭个简单服务器

用nodejs+express搭个简单服务器。几行代码足矣。

const express = require('express');const app = express();
app.get('/user',(req,res)=>{ console.log('user');
 res.send(‘success’);
})
app.listen(3000,()=>{ console.log('start');
});

启动服务器。然后写个测试函数,先试试ajax。

function getUserAjax(){ let xhr= new XMLHttpRequest();
 xhr.open("GET","http://127.0.0.1:3000/user",true);
 xhr.send();
}

在chrome控制台下运行getUserAjax函数。

可以看到被拒绝了,浏览器没有成功拿到success。这个时候就需要用到jsonP了。因为script标签本身就是可以跨域请求JS文件的。

function getUser(){ let dom = document.createElement('script');
 dom.src = "http://127.0.0.1:3000/user"; document.body.appendChild(dom);
}

控制台下运行getUser()。

success没有定义。可见浏览器已经跨域获取到了‘success’。因为script标签加载的JS会立刻执行,而success没有被定义,所以报了这个错。这个时候已经很明了了。前端发请求时将函数名,例如callback传给后台,后台再返回这个函数,callback(info)。这样浏览器接受到数据后,会马上执行callback函数,就像回调函数一样。马上开始改装:
前端代码:

function callback(info){
 alert(info);
}function getUser(){ let dom = document.createElement('script');
 dom.src = "http://127.0.0.1:3000/user?callback=callback"; //url上指明回调函数的名字
 document.body.appendChild(dom);
}

后台代码:

const express = require('express');const app = express();
app.get('/user',(req,res)=>{ let func = req.query.callback;
 res.send(func+'(' + '"success"'+')');
});
app.listen(3000,()=>{ console.log('start');
});

再次执行getUser();成功弹出了success。这就是jsonP的原理。后台返回一个JS函数,带上参数,调用前端准备好的函数。即实现了发请求和回调函数的效果。

cors

这个就更简单了。上面ajax跨域的时候报了这个错误 No 'Access-Control-Allow-Origin' header is present on the requested resource。
那服务器返回的时候带上‘'Access-Control-Allow-Origin' 就好了。他的意思是允许哪些源的请求。你虽然不是我家的人,但这次我信任你,给你个钥匙。
改装下后台代码:

const express = require('express');const app = express();
app.get('/user',(req,res)=>{
 res.header("Access-Control-Allow-Origin", "*"); //设置返回数据的头,代表接受任意源的请求
 res.send('success');
});
app.listen(3000,()=>{
 console.log('start');
});

再在控制台调用上文的getUserAjax()。成功。前端都不用改代码。不过要注意的是cors不是所有的浏览器都会支持。

jsonP和cors比较

cors与jsonP的使用目的相同,但是比jsonP更强大。
jsonP只支持GET请求,cors支持所有类型的HTTP请求。jsonP的优势在于支持老式浏览器,以及可以向不支持cors的网站请求数据。

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:

js基础提升学习之基本数据类型

怎样利用JS自定义哈希表和顺序列表

热心网友 时间:2022-05-15 00:31

location.hash + iframe
原理是利用location.hash来进行传值。
假设域名a.com下的文件cs1.html要和cnblogs.com域名下的cs2.html传递信息。
1) cs1.html首先创建自动创建一个隐藏的iframe,iframe的src指向cnblogs.com域名下的cs2.html页面
2) cs2.html响应请求后再将通过修改cs1.html的hash值来传递数据
3) 同时在cs1.html上加一个定时器,隔一段时间来判断location.hash的值有没有变化,一旦有变化则获取获取hash值
注:由于两个页面不在同一个域下IE、Chrome不允许修改parent.location.hash的值,所以要借助于a.com域名下的一个代理iframe
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 在word中.doc改错了写成.docx之后文件打开不能用了怎么办 银行卡借给别人网赌什么后果 银行卡租给别人用犯法吗 在Word编辑状态,先后打开了d1.doc文档和d2.doc文档,则___。 在WORD的编辑状态,按先后顺序依次打开了d1.doc,d2.doc,d3,doc,d4,doc共4个文档,当前的活动窗口是 进入Word后,打开了一个已有文档w1.doc,又进行了“新建”操作则( )。 在Word的编辑状态,打开了一个文档,进行“保存”操作后,该文档______。 在word的编辑状态打开a.docx保存后另存为b.docx则当前文档是 银行卡能借给别人用吗卡里没有钱 打开了&quot;w1.doc&quot;文档,把当前文档以&quot;w2.doc&quot;为名进行&quot;另存为&quot;操作( ) 考银行看行测还是公共基础?这两个区别在哪里啊,求考过的高手说下 考银行时要考行测是跟公务员考的行测是一样的吗? 银行招考行测部分。 请问股票中的“机构介入比例”指标是如何算出来的? 公务员考试和银行校招行测有什么区别? 商业银行考试的行测和公*的行测是有什么区别啊?是考选择题吗? 人民银行的行测考试和公*有什么区别?和事业单位考试一样吗? 兴业银行进行考行测是什么意思? 大便不成形而且很粘是怎么回事? 我几年来,大便不成形,有时伴有腹痛,有黏液,是结肠炎吗,该怎样治疗,谢谢。 怎么样可以发布自己原创的歌曲,在酷狗可以搜得到 酷狗音乐可不可以不用“5sng原创”音乐就上传翻唱作品? 佳能打印机美版怎么找驱动 忘川风华录杨玉环卡上有天佑是啥意思 忘川风华录名士怎么提高战斗力-战力提升攻略 忘川风华录需要攒勾玉吗 猫灵怎么出现人形 《妖界来的猫》txt下载在线阅读全文,求百度网盘云资源 果子狸会吃猫吗 灵猫传灵猫有哪些 各类型灵猫哪个好 鱼鳅猫是不是果子狸 在浙江再次拍到的小灵猫,它究竟长什么样? 买什么牌子的家用打印机更好用啊? 小灵猫的介绍 猫与鬼有什么联系吗?! 猫确实会通灵吗? 洛克王国响铃猫值得练吗 104平的复式小吗? 3房2厅104平米需要装1拖几中央空调 3室1厅104平方米的房子大吗?