首页 > 跨域问题具体的解决方式??

跨域问题具体的解决方式??

今天看面试题遇到,网上说的不是很清楚,求大神解答


Ajax 请求是受同源策略限制的,而 HTML 中部分标签(<script> <img> <iframe>)是不受同源策略限制的。所以可以利用这些标签来请求跨域数据。一般来说开发中大多使用<script>标签来进行跨域请求,因此需要进行跨域时,就使用脚本动态创建一个<script>标签,向外域服务器请求一段脚本,数据写在脚本中,就可以拿到数据。这时候就必须考虑如何处理请求的数据。直接返回var data = xxx当然可以在当前页面中添加一个全局变量,但这么做不能解决两个问题:1.污染全局空间 2.脚本是异步加载的无法进行回调。因此前端和后端会约定一个回调方法名callback,跨域返回的数据会直接作为这个方法的实参传入,即包装为callback(data)的形式,这整个模式就叫做 JSONP。


同上,建议看看下面的文章,核心就是动态创建script标签:

[http://baike.baidu.com/link?url=JkDU6SjuesCc5mIVmH8kbuufgK4hBPGXzSrlNl0dBqgX8qLNHCR2j9QLiM3Ki1LWOPPXSLp0nYzZVM0rhUCnhq][1]

第一种,转为同域;
第二种,jsonp;
第三种,设置允许跨域


1.iframe 设置document.domain可以跨子域,支持post

2.jsonp方式, 实质是通过url中的query传参,制造一个script标签

3.CORS方式,也就是http头中设置 Access-Control-Allow-Origin,这货是ajax才能用起来的,设了对iframe没啥用

4.flash跨域

5.在后端用nginx之类的反向代理,把跨域转换成同域或者同主域


Response 中添加 Access-Control-Allow-Origin 的 header,它的值就是允许跨域访问服务器的域名,如:

Access-Control-Allow-Origin : http://example.com

如果值是 * ,则是允许所有域名访问,如:

Access-Control-Allow-Origin : *

如果要携带Cookie,就添加 Access-Control-Allow-Credentials,将其值设为 true

还有就是用jsonp实现跨域访问了

【热门文章】
【热门文章】