同源政策及解决方案

1,同源

1.1同源是什么

如果两个页面的协议,域名和端口一致则这两个页面属于同一个源,其中只要有一个不相同就是不同源。

1.2同源政策

ajax只能向自己的服务器发送请求,例(A网站中的HTML文件只能向A网站服务器发送ajax请求,B网站中的HTML只能向B网站发送ajax请求)
同源政策的目的:保护用户信息的安全,防止恶意的网站窃取。

1.3同源限制的解决方案

第一种jsonp 解决跨域请求 重点
第二种: 静态script标签 的src属性 进行跨域请求
第三种: 动态script标签的 src属性 发送跨域请求

1.3.1使用jsonp解决同源限制的问题

核心:1,动态创建script标签,将不同源的服务端请求地址写在script标签的src属性中。
2,服务器端响应的数据必须是一个函数的调用,正在发送给客户的数据需要作为函数调用的参数返回。
例:jsonp的封装:

function jsonp(obj) {            
         var defaults = {                
                    url: '#',                
                    dataType: 'jsonp',                
                    jsonp: 'callback',                
                    success: function(data) {
                         console.log(data);               
                          }            
           }           
            for (var key in obj) {                
            defaults[key] = obj[key];            
            }
var cbName = 'jQuery' + ('1.11.1' + Math.random()).replace(/\D/g, '') + '_' + (new Date().getTime());
    if (defaults.jsonpCallback) {                
            cbName = defaults.jsonpCallback;            
            }
           indow[cbName] = function(data) {
           obj.success(data);            
     }
  var param = '';            
    for (var attr in obj.data) {  
          param += attr + '=' + obj.data[attr] + '&';
     }            
     if (param) {                
         param = param.substring(0, param.length - 1);
         param = '&' + param;            
     }

 var script = document.createElement('script');           
 script.src = defaults.url + '?' + defaults.jsonp + '=' + cbName + param;           
 var head = document.getElementsByTagName('head')[0];
 head.appendChild(script);
        }
注:jsonp不是一种数据格式,它是用来解决跨域获取数据的一种解决方案核心是通过动态创建script标签,然后通过标签的src属性获取js文件中的js脚本,该脚本的内容是一个函数调用,参数是服务器返回的数据,需要事先在页面上定义好回调函数其本质并不是ajax技术
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值