跨域

1、 什么是同源策略

浏览器出于安全方面的考虑,只允许与本域下的接口交互。不同源的客户端脚本在没有明确授权的情况下,不能读写对方的资源。

本域指的是?

  • 同协议:
    如:都是http,https,file,ssh,mailto,tel
    反例:http://baidu.com和 https://baidu.com/a.js (协议不同)
  • 同域名(在//后到第一个/之间):
    如:都是http://baidu.com/a 和http://baidu.com/b
    反例:http://baidu.com 和 http://bbs.baidu.com (域名不同,域名必须完全相同才可以)
  • 同端口:如都是80端口
    如:http://baidu.com/a/b.js 和 http://baidu.com/index.php
    反例:http://baidu.com 和 http://baidu.com:8080/a.js (端口不同,第一个是80)

2、什么是跨域?跨域有几种实现形式

跨域就是突破同源策略的限制,使一个域名的网页可以请求另一个域名的资源。实现方式:

  • 降域document.domain
    前提条件:操作iframe,这两个域名必须属于同一个基础域名!而且所用的协议,端口都要一致,否则无法利用document.domain进行跨域同时为两个域设置document.domain= xxx.com

  • jsonp :
    利用script的src标签的跨域属性,传递一个callback参数给服务端来获取其他源的数据

  • cors 跨域资源共享:
    在HTTP请求里添加特殊的头,允许服务器指定特定的域名可以跨域访问。

  • HTML5 postMssage:
    html5引入的API,可以实现跨文档、多窗口、跨域消息的传递。

3、 JSONP 的原理是什么

  • 利用 并提供一个回调函数来接收数据(函数名可约定,或通过地址参数传递)。
  • 第三方产生的响应为json数据的包装(故称之为jsonp,即json padding),形如: callback({"name":"hax","gender":"Male"}) 这样浏览器会调用callback函数,并传递解析后json对象作为参数。本站脚本可在callback函数里处理所传入的数据。

4、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:*")
//指定所有域都可以请求它;

5、演示三种以上跨域的解决方式 ,写成博客

几种跨域的演示

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