JSONP_跨域

JSONP_跨域

什么是同源策略

浏览器出于安全方面的考虑,只允许与本域下的接口交互。不同源的客户端脚本在没有明确授权的情况下,不能读写对方的资源
由Netscape提出的一个著名的安全策略。现在所有支持JavaScript 的浏览器都会使用这个策略

本域名指的是:

  • 同协议
如:都是http,https,file,ssh,mailto,tel协议
例:http://jirengu.com和 https://jirengu.com/a.js          //两个协议不同
  • 同域名
在//后到第一个/之间的域名完全相同
例:http://jirengu.com/a  和  http://jirengu.com/b        //同域名
http://jirengu.com   和    http://bbs.jirengu.com             //不同域
  • 同端口
如都是80端口
例:http://jirengu.com/a/b.js 和 http://jirengu.com/index.php   
//同端口(没写端口的默认端口为80)
http://jiengu.com 和 http://jirengu.com:8080/a.js    
//不同端口(前一个端口为8080)
什么是跨域?跨域有几种实现形式

什么是跨域

  • 跨域就是突破同源策略的限制,使一个域名的网页可以请求另一个域名的资源

实现方式

  • 降域document.domain
    前提条件:操作iframe,这两个域名必须属于同一个基础域名!而且所用的协议,端口都要一致,否则无法利用document.domain进行跨域同时为两个域设置document.domain= xxx.com
  • jsonp
    利用script的src标签的跨域属性,传递一个callback参数给服务端来获取其他源的数据
  • cors 跨域资源共享
    在HTTP请求里添加特殊的头,允许服务器指定特定的域名可以跨域访问
  • HTML5 postMssage
    html5引入的API,可以实现跨文档、多窗口、跨域消息的传递
JSONP 的原理是什么
  • 利用 并提供一个回调函数来接收数据(函数名可约定,或通过地址参数传递)
  • 第三方产生的响应为json数据的包装(故称之为jsonp,即json padding),形如: callback({"name":"hax","gender":"Male"}) 这样浏览器会调用callback函数,并传递解析后json对象作为参数。本站脚本可在callback函数里处理所传入的数据
CORS是什么
  • CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing),避开了浏览器的同源策略,通过在http请求里添加特殊的头,允许服务器指定哪些跨域请求是允许的
  • 与jsonp使用目的相同,但是要比jsonp更强大,缺点是不兼容老的IE浏览器。如:
header("Access-Control-Allow-Origin:http://jiuyi.com")
//指定[http://jiuyi.com](http://jiuyi.com) 这个域可以请求它;
header("Access-Control-Allow-Origin:*")
//指定所有域都可以请求它;
根据视频里的讲解演示三种以上跨域的解决方式 ,写成博客

你可能感兴趣的:(JSONP_跨域)