同源策略
浏览器故意设计的一个功能限制,不同源的页面之间,不能互相访问数据。
同源策略限制的是数据访问,引入并不限制
同源
源:
window.origin 或 location.origin 可以得到当前源
源 = 协议 + 域名 + 端口号
两个URL:
协议 +域名 + 端口号 完全一致,这两个URL就是同源的
同源策略
浏览器规定:
如果JS运行在源A里,只能获取源A的数据,不能获取源B的数据,即不允许跨域
目的是防止其他开发者获取/篡改你的数据
CORS
突破浏览器限制的一个方法
A和B都是我的网站,我只需要在A的响应头里添加B的网站,B就可以进行数据访问了
简单请求语法
'Access-Control-Allow-Origin', 'http://B.com' // 设定特定同源
request.headers['referer'] // 谁访问我,谁就是同源
高级请求语法请看mdn
JSONP
IE时代的妥协
··········
A将数据写到A.js
B用script标签引用A.js
B事先定义好window.xxx({A: […]})函数,然后执行
然后B就能通过window.xxx获取到数据了
window.xxx就是一个回调
JSONP是什么
在跨域的时候,由于当前浏览器不支持CORS,必须使用另外一种方式跨域。于是需要请求一个JS文件,这个JS文件会执行一个回调,回调里面就有我们的数据。–回调的名字可以随机生成一个随机数,以callback方式把参数传给后台,后台把函数返回给我们并执行。
创造一个script请求JS,JS会把数据夹带过来,然后再拿到这个JS的数据。
JSONP优点
兼容IE
可以跨域
JSONP缺点
读取不到状态码 - - 由于它是script标签,所以它读不到ajax精确的状态,拿不到状态码,也不知道响应头是什么,它只知道成功和失败
只能发get请求 - - 由于它是script标签,所以它只能发get请求