关于ajax的跨域

在前端开发中,跨域是经常遇到的问题,也是面试最喜欢问的问题,究其根本原因,是浏览器的同源策略所致,是浏览器为了避免不同域名不能共享cookie以及locationstorage等等,发起请求的时候无法携带不同域名的cookie,不能请求不同域名的json。

   但是事无绝对,浏览器是运许srcipt标签跨域访问的,也就是说我可以在我的页面引用不同域名的script,另外h5提供了一些带有一定安全措施的跨域办法。

   跨域一般有以下集中方法:

    jsonp/script:jsonp和script其实都是利用script无跨域限制来实现的,jsonp是使用了一下eval函数把字符串变成对象(具体的内部机制可以在网上查阅)

   postmessage方法:chrome插件中的background.js跟原页面的通讯也是这样的实现,也就是我在另外的页面上有接受send过来字符串对应的处理方法
  中间层:利用服务端做中间层转化一次

     

 

在jq的aajx方法中有这样一个参数平时用的比较少,发现设置后可以跨域,在页面加入这样的配置即可

 

1
2
3
4
5
6
$.ajaxSetup({
                crossDomain: true ,
                xhrFields: {
                    withCredentials:  true
                }
            });

  这个方法的细节还有待研究,先列出来吧,crossDomain好理解,另一个还没仔细研究,先记下来,以后补充

     这是jquery 的写法,如果使用原生的javascript,可以参考如下写法:

  

复制代码
 1  //这里需要处理针对不同浏览器的xmlhttprequest,ie的是activeXObject
 2                 var xhr = new XMLHttpRequest();
 3                 xhr.open("GET", "test");
 4 
 5                 xhr.setRequestHeader('Content-Type','text/html');
 6                 xhr.setRequestHeader('Access-Control-Allow-Origin','*/*');//这里可以是设置请求允许的域名白名单的,可以直接写域名,也可以写*表示全部
 7                 xhr.withCredentials=true;//这个是设置允许跨域的
 8                 xhr.onreadystatechange = function() {
 9                 //todo
10                 }
11                 xhr.send();
复制代码

 

    前端做了这些之后,还需要服务端设置接受http头信息,当然也可以设置指定域名的:

    

  
1
2
3
4
5
Access-Control-Allow-Origin: *
 
Access-Control-Allow-Origin: */*
 
Access-Control-Allow-Origin: http: //www.test.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值