跨域问题的解决方案

首先了解下浏览器的同源策略 同源策略/SOP(Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议+域名+端口"三者相同,三者有一个不相同那么便非同源
跨域问题解决方式
1.

第一种:通过服务端代理请求。

如PHP,服务端语言php是没有跨域限制的。

  • 让服务器去别的网站获取内容然后返回页面。

第二种:jsonp跨域

jsonp跨域就是利用script标签的跨域能力请求资源

  • 既然叫jsonp,显然目的还是json,而且是跨域获取
  • 利用js创建一个script标签,把json的url赋给script的scr属性,把这个script插入到页面里,让浏览器去跨域获取资源
  • callback是页面存在的回调方法,参数就是想得到的json
  • 回调方法要遵从服务端的约定一般是用 callback 或者 cb
  • 注意:jsonp只针对get请求

第三种:CORS 跨域资源共享(xhr2)

CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)

  • 它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制
  • 整个CORS通信过程,都是浏览器自动完成,不需要用户参与
  • 对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样
  • 实现CORS通信的关键是服务器,只要服务器实现了CORS接口,就可以跨源通信

实现CORS并不难,只需服务端做一些设置即可:如

<?php header("Access-Control-Allow-Origin:*");?> // 允许任何来源

注意:IE10以下不支持CORS

nginx代理跨域


nginx服务器来做代理,躲避跨域
5.

document.domain + iframe跨域

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

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

<iframe id="iframe" src="http://child.domain.com/b.html"></iframe>
<script>
    document.domain = 'domain.com';
    var user = 'admin';
</script>

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

document.domain = 'domain.com';
// 获取父窗口中变量
alert('get js data from parent ---> ' + window.parent.user);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值