什么是跨域?
跨域指的是浏览器页面访问不同的服务器的时候,因为同源策略限制导致的请求不成功。‘
解决方法:
1.JSONP
原因:<script>标签不受同源策略的影响
用法:前端准备搞回调函数,放入<script>标签中的src属性中,向后端发送请求的时候,后端就能拿到回调函数,将数据作为参数传给回调函数,前端自然就会收到数据
缺点:只支持get请求,不支持post请求,因为发送的请求携带在script的url中,不带请求体
2.cors跨域请求
用法:首页浏览器会判断该请求是简单请求还是复杂请求,如果是简单请求,会自动在请求头中加上origin(值为浏览器url),后端收到请求后需打开cors接口:设置access-control-allow-origin的值为前端传过来的origin。如果是非简单请求(put,delete,axios请求等),浏览器会先发送一条预检option请求,预检请求会询问服务器是否支持当前域名的请求,是否支持修改的头信息字段,收到肯定回复后,浏览器才发送真正的http请求。
对于需要携带cookien的cors跨域请求:
后端设置access-control-allos-credential为true,前端设置xhr.withcredential为true。注意需要携带cookie的话,后端的access-control-allow-origin不能设置为*。
3.使用代理服务器
a要访问c,两者不同源,则a先去访问和a同源的代理服务器b,由于服务器之间不存在跨域,由b去获得c的api接口,返回给a
4.windowt提供的课跨域方法Postmesaage