跨域、CORS、JSONP

121 阅读2分钟

同源

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

源 = 协议 + 域名 + 端口号

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

  • 举例

qq.com、https://www.baidu.… 不同源

baidu.com、https://www.baidu.… 不同源

完全一样才算同源

跨域

当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域

出于浏览器的同源策略限制。同源策略是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)

CORS

如果bbt.com想要获取bbter.com的数据进行访问共享数据,就得在bbter.com响应头声明

Access-Control-Allow-Origin:bbt.com

CORS分简单请求和复杂请求 具体可看MDN文档developer.mozilla.org/zh-CN/docs/…

JSONP

JSONP就是我们在跨域的时候由于当前浏览器不支持CORS或者某些条件不支持CORS 我们必须使用另外一种方式来跨域,于是我们就请求一个JS文件,这个JS文件会执行回调 回调里面就有我们的数据。回调名字可以随机生成的, 一个随机数,我们把这个名字以callback参数 传给后台,后台会把这个函数再次返回给我们并执行。

  • 优点: 兼容IE,可以跨域

  • 缺点: 由于它是script标签 所以他读不到AJAX那么精确的状态 所以他不知道状态码是什么,也不知道整个响应头是什么 都不知道 只知道成功或者失败了 由于它是script标签不支持post只支持get请求