跨域、CORS、JSONP

87 阅读1分钟

跨域

同源定义

window.origin 或 location.origin 可以得到当前源

源 = 协议 + 域名 + 端口号

如果两个 url 的协议、域名、端口号完全一致,那么这两个 url 就是同源的,完全一致才算同源

qq.comwww.baidu.com 不同源 baidu.comwww.baidu.com 不同源

  • 浏览器规定:

如果 JS 运行在源 A 里,那么就只能获取源 A 的数据。不能获取源 B 的数据,即不允许跨域

不同源的页面之间,不准互相访问数据

  • 为什么可以跨域使用CSS、JS和图片等?

同源策略限制的是数据访问,引用 CSS、JS 和图片的时候,只是在引用,并不知道其内容。我们并不知道 CSS 的第一个字符是什么

怎么解决跨域

  • CORS(IE不支持)

  • JSONP

JSONP 是什么

什么是JSONP: 我们可以请求一个JS文件,这个文件会执行一个回调,回调里面有数据

回调名字是随机生成的一个随机数。我们把这个名字以callback的参数传给后台,后台再返回给我们并执行。

回答:

  1. JSONP当前网站创建一个script去请求另一网站的JS,JS会夹带数据,数据会在当前网站上调用全局函数运行。

  2. JSONP的优点是:兼容IE,可以跨域

  3. JSONP的缺点是:由于是script标签,所以读不到状态码,只知道成功或者失败,也只能发GET请求,不支持POST