• 0
  • 0
分享
  • js解决跨域问题——软件测试圈
  • 北极 2022-06-06 11:16:34 字数 1905 阅读 1061 收藏 0

一、同源策略

所谓同源策略,就是指两个页面具有相同的协议,主机(也常说域名),端口,三个要素缺一不可

二、什么是跨域 

单地理解就是因为JavaScript同源策略的限制,一个域的页面去请求另一个域的资源,A域的页面去请求B域的资源。

1.png

三、解决跨域

1、Jsonp实现跨域

jsonp的原理:动态创建<script>标签,而<script>的src属性是没有跨域限制的

  • 前端创建script标记,设置src,添加到head中(你可以往body中添加)

  • 后台返回一个js变量jsonp,这个jsonp就是请求后的JSON数据

  • 回调完成后删除script标记(还有一些清理工作如避免部分浏览器内存泄露等)

<script type="text/javascript">
    function callback(data) {
        alert(data.message);
    }
    function addScriptTag(src){
    var script = document.createElement('script');
        script.src = src;
        document.body.appendChild(script);
    }
 
    window.onload = function(){
        addScriptTag("http://www.foo.com/js/outer.js");
    }
</script>

2、代理的方式

服务器A的test01.html页面想访问服务器B的后台action,返回“test”字符串,此时就出现跨域请求,浏览器控制台会出现报错提示,由于跨域是浏览器的同源策略造成的,对于服务器后台不存在该问题,可以在服务器A中添加一个代理action,在该action中完成对服务器B中action数据的请求,然后在返回到test01.html页面。

2.png

3、CORS

CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。它允许浏览器向跨源(协议 + 域名 + 端口)服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。

浏览器将CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)。

浏览器发出CORS简单请求,只需要在头信息之中增加一个Origin字段。

浏览器发出CORS非简单请求,会在正式通信之前,增加一次HTTP查询请求,称为"预检"请求(preflight)。浏览器先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些HTTP动词和头信息字段。只有得到肯定答复,浏览器才会发出正式的XMLHttpRequest请求,否则就报错。

btn.onclick = function(){
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function(){
        if(xhr.readyState == 4){
            if ((xhr.status >= 200 && xhr.status < 300)|| xhr.status == 304){
                result.innerHTML = xhr.responseText;
            }else{
                alert("Request was unsuccessful: " + xhr.status);
            }    
        }
    };
    xhr.open("post", "https://www.webhuochai.com/test/iecors.php", true);
    xhr.send(null);    
}

注意:CORS请求发送Cookie时,Access-Control-Allow-Origin只能是与请求网页一致的域名。同时,Cookie依然遵循同源政策,只有用服务器域名设置的Cookie才会上传,其他域名的Cookie并不会上传,且(跨源)原网页代码中的document.cookie也无法读取服务器域名下的Cookie


作者:JS人柱力

原文链接:https://blog.csdn.net/m0_62336865/article/details/124762501

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 自2014年成立以来,新浪金融评测室已连续成功举办六届手机银行APP测评,积攒了丰富的测评经验,获得了业界的广泛认可。2019年,新浪金融研究院对21家主流手机银行APP从用户体验、产品功能、性能安全和发展创新四个方面进行测评分析,并对各个APP的亮点和存在的问题进行了梳理。测评结果显示,工农中建四大行和招商、平安、民生、光大等股份制银行排名靠前,测评结果基本代表了目前银行业资金实力和科技实力最强的银行群体。用户使用APP过程中最直观的印象几乎都来自用户体验和产品功能。新浪测评中,这两项分值占比高达75%,基本上可以代表测评总分值。得分高的手机银行,用户体验和产品功能一定做得好。带给用户最丰富...
            0 0 2776
            分享
          •  Fiddler是一款强大的抓包工具,通过改写HTTP代理,让数据经由Fiddler,借此来监控并截取到请求和返回数据。这样一来它不仅可以定位前后端问题,还能够记录客户端和服务端的所有http请求、设置断点、篡改数据等,功能非常强大。  Fiddler界面简介  Fiddler的基本界面包含:工具栏、会话列表、命令行工具、HTTP Request信息栏、HTTP Response信息栏等。  1、工具栏:快捷功能菜单,可以进行清除会话、保存会话等操作;  2、会话列表:截获的请求会话列表,每一个请求为一个会话;  3、QuickExece命令行:允许直接输入命令(如:Help、Cls、bpu)...
            3 4 2571
            分享
          •   现在中国出现一种叫做“通缩”的现象,即整体“通缩”,局部“通胀”,这个社会整体看是“通缩”,而目前的学历贬值,一定程度可理解为一种“通胀”。  从本科到硕士博士,从一般学校到211/985,个人获得文凭是上涨了,但它在市场上的价值却缩水了。  拿通缩现象来说,一个是高学历的人找不到工作,一个是劳动力短缺。  劳动力短缺又分两种:  一种是初级劳动力,比如,服务行业的服务员和流水线工人;一种技术人才,不管制造业还是互联网行业懂技术和业务的人才,企业招不到。  在整体社会局势复杂的情况下,我们需要启动丹尼尔·卡尼曼的《思考,快与慢》的系统2(慢思考),即,人们的一种慢速、有意识、分析型的思考模...
            0 0 1041
            分享
          • 2018年最受人追捧的技术无疑是:人工智能,大数据,云计算,区块链。前三者对于IT圈内外的人还能知道是什么,能够运用到实际生活中哪些地方,而最后一个区块链技术,却是连大多数的程序员都说不清其概念,更不要提具体的应用场景,唯一能说出和区块链挂钩的名词也就是比特币等金融方面,那么区块链的深度就仅限于此吗?非也,本文就由易大师从目前投资最火热比特币等虚拟货币作为一个切入点,给大家讲讲区块链到底是什么?比特币又是什么? 先从大家最熟悉的比特币开始说起,自2008年金融危机后,全球人民都不再相信美国政府的公信力,由代号中本聪的存在创建比特币白皮书《比特币:一种点对点的电子现金系统》首次提出区块链...
            15 8 12436
            分享
          •   2018 年在亚利桑那州坦佩(Tempe)造成一名 49 岁妇女死亡的优步(Uber)自动驾驶汽车的司机承认了一项危害罪,并于周五被判处三年缓刑。拉斐拉-巴斯克斯(Rafaela Vasquez)在亚利桑那州的 Uber 自动驾驶汽车测试项目中担任安全驾驶员。当她的车辆碾过推着自行车过马路的伊莱恩-赫兹伯格(Elaine Herzberg)时,她正坐在方向盘后。  据了解,这起发生在2018年3月18日的车祸是第一起涉及自动驾驶汽车的致命碰撞事故。  据《亚利桑那共和报》(Arizona Republic)报道,检察官将瓦斯奎兹描述为车辆的"眼睛和耳朵",碰撞发生时,车...
            0 0 1005
            分享
      • 51testing软件测试圈微信