1.同源策略
浏览器出于安全考虑,对同源请求放行,对异源请求限制,这些限制规则被统称为同源策略,所造成的开发问题称为跨域问题。
离开浏览器没有跨域问题
2.同源
协议、域名、端口全部一致
3.同源限制
对标签元素轻微限制:img、script、video等等
对Ajax请求严格限制:浏览器可以正常发出请求,服务器可以正常响应请求,但是响应的结果需要浏览器校验,校验不通过则造成跨域问题
4.cors
cors是一套机制,用于浏览器校验跨域请求
服务器明确表示允许,则校验通过
服务器没有明确拒绝或者没有表示,则校验不通过
cors将请求分为两类:
(1)简单请求
请求方法:get、head、post
请求头满足cors安全规范:一般不修改请求头就可以
请求头content-type:text/plain、multipart/form-data、application/x-www-form-urlencoded(其中之一)
处理方法:浏览器自动携带请求头属性origin:请求源(http://www.xxx.com),服务器返回响应头属性Access-control-allow-origin:请求源/*,表示同意跨域请求
(2)预检请求
除了简单请求都是预检请求
处理方法:先发送options请求,携带请求头属性origin、access-control-request-method、access-control-request-headers,服务器返回Access-control-allow-origin、access-control-request-method、access-control-request-headers的值和预检请求头里的一致,表示同意跨域请求,然后再以简单请求的方式发送请求
5.jsonp
使用标签script请求跨域资源
//创建script元素,添加src请求源
<script src="请求源"/>
// 声明回调函数
function callback(res){
console.log(res)
}
// 服务器返回的数据中直接调用callback并传递参数就可以拿到数据
callback(data)