同源
两个页面具有相同的协议(http / https)、域名、端口
跨域
一个网页去请求另一个网页数据(只要协议、域名、端口号有一个不同,就是跨域)
跨域常用的两种方法
1、CROS
//需要在服务端添加
response.setHeader('Access-Control-Allow-Origin','http://foo.example')
2、JSONP
JSONP 是 JSON Padding
JSONP实现跨域通过创建动态script标签,利用script标签的src不受同源策略约束来获取数据 实现跨域
优点:兼容IE 可以跨域
缺点:由于是script标签,无法读取状态码、不支持POST
实现JSONP跨域的方法:
1、声明一个全局函数
2、动态创建一个script标签
3、给标签的src进行赋值
4、然后进行函数回调
5、将标签插入页面上
6、加载完后 删除
//服务端
// request.headers['referer'].indexOf('http://foo.example') === 0 请求referer验证
const string = fs.readFileSync('...js').toString()
const data = fs.readFileSync('...json').toString()
const string2 = string.replace('{{data}}', data)
response.write(string2)
//请求端
const script = document.createElement('script')
script.src = `http://foo.example`
script.onload = () =>{
script.remove()
}
document.body.appendChild(script)