- 同源
√.源=协议+域名+端口号 (window.origin/location.origin可查看源)
√.当两个URL的协议、域名、端口号完全相同时,即同源
- 跨域
√.跨域就是一个源可以访问另外一个源里的数据,由于浏览器的同源策略,浏览器会阻止跨域。
√.只要两个url中的协议名、域名、端口号有一个不同就是跨域。
- JSONP跨域
√.为兼容IE,通过创建script标签去请求在另外一个服务器里的JS数据,
√.由于是script标签,不能看到响应头、状态码;同时只能发“GET”请求,不能发“POST”请求,
function jsonp(url) {
return new Promise((resolve, reject) => {
const random=Math.radom()
window[random] = (data) => { resolve(data) }//创建一个window.xxx()的回调函数
const script = document.createElement('script')
script.src = `${url}?callback=${random}`
script.onload = () => {
script.remove()//拿到数据后删除script标签
}
script.onerror = () => {
reject()
}
document.body.appendChild(script)
})
}
jsonp(url).then(data => console.log(data))
这就是一个简单JSONP的原理
4.CORS跨域 √.全称:Cross-origin resource sharing(跨源资源共享) √.只需在header里设置:
response.setHeader('Access-Control-Allow-Origin',url)
√.如果有多个URL,则令const url=request.headers['referer'] √.唯一缺点,CORS不兼容IE