同源策略及跨域

233 阅读1分钟
  1. 同源

√.源=协议+域名+端口号 (window.origin/location.origin可查看源)

√.当两个URL的协议、域名、端口号完全相同时,即同源

  1. 跨域

√.跨域就是一个源可以访问另外一个源里的数据,由于浏览器的同源策略,浏览器会阻止跨域。

√.只要两个url中的协议名、域名、端口号有一个不同就是跨域。

  1. 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