同源与跨域

同源策略
同源策略指的是服务器不能访问不同源服务器上的资源
同源指的是协议、端口、域名都相同
不同源就是协议、端口、域名有一项不同就不同源

同源的限制

  • Cookie、LocalStorage 和 IndexDB 无法读取。
  • DOM 无法获得。
  • AJAX 请求不能发送。



跨域

  • jsonp
  • WebSocket
  • CORS
  • 服务器代理

jsonp
一般有src属性的标签都可以跨域访问资源,如srcipt、img、iframe等。jsonp就是利用srcipt来跨域的。
script加载的是js代码,所以利用script跨域就要将数据封装成js。数据封装成js那不就是json吗。另外获取数据后还要进行处理,我们定义一个处理数据的函数,并将函数作为回调函数以参数的形式添加到url中发送给服务器,服务器再将json作为回调函数的参数返回,这样script加载js后就直接执行了。

//动态添加script
function addScript(url){
    var script=document.createElement('script');
    script.setAttribute('src', url);
    document.getElementsByTagName('head')[0].appendChild(script);
}
//跨域访问,此链接是百度的搜索建议,具体的js代码是foo(数据),当加载完代码就是执行这个函数
window.onload=function(){
    addScript('https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=a&cb=foo');
}
//用来处理数据的回调函数
function foo(data){
    console.log(data);
}

jquery封装了jsonp

<html>
<head>
    <title>我是B页面</title>
</head>
<body>
    <button id="btn">button</button>
<script src="jquery-3.2.1.js"></script>
<script>
    $(function(){
        $('#btn').click(function(){
            $.ajax({
                type:'get',
                dataType:'jsonp',    
                url:'https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=a',
                jsonp:'cb', //替代URL 参数里的 "callback" 部分,cb=?会传递给服务器
                success:function(res){
                    console.log(res)
                }
            });
        });
    });
</script>
</body>
</html>

这里写图片描述
jquery会随机生成一个回调函数名发送给服务器,jquery自动帮你生成回调函数并把数据取出来供success属性方法来调用。jsonpCallback选项可以为jsonp请求指定一个回调函数名。这个值将用来取代 jQuery 自动生成的随机函数名。这主要用来让 jQuery 生成度独特的函数名,这样管理请求更容易,也能方便地提供回调函数和错误处理。你也可以在想让浏览器缓存 GET 请求的时候,指定这个回调函数名。

跨域资源共享(CORS)
jsonp实现跨域
服务器代理:浏览器有跨域限制,但是服务器不存在跨域问题,所以可以由服务器请求所要域的资源再返回给客户端。

参考链接: 挺好的jsonp文章百度搜索框
阮一峰的博客:浏览器同源政策及其规避方法跨域资源共享 CORS 详解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值