1、什么是跨域?
由浏览器同源策略限制的一类请求场景,当不同地址,不同端口,不同级别,不同协议就会构成跨域。
2、什么是同源策略限制?
所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。
它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。
3、如何解决跨域?
1、 通过jsonp跨域
2、CORS
3、 nginx代理跨域
4、什么是jsonp跨域方式?
jsonp只有在请求方式为get的时候才能使用,jQuery中jsonp可以使用post方法,但是实际上还是转换成了get方式请求,容易踩坑请注意.
JSONP 是 JSON with padding(填充式 JSON 或参数式 JSON)的简写。
JSONP实现跨域请求的原理简单的说,就是动态创建<script>
标签,然后利用<script>
的src 不受同源策略约束来跨域获取数据。
JSONP 由两部分组成:回调函数和数据。回调函数是当响应到来时应该在页面中调用的函数。回调函数的名字一般是在请求中指定的。而数据就是传入回调函数中的 JSON 数据。
5、什么是CORS跨域?
CORS是一个W3C标准,全称是"跨域资源共享";它允许浏览器向跨源服务器,发出XMLHttpRequest
请求,从而克服了AJAX只能同源使用的限制。
处理方法:
后台:配置access-control-allow-origin:*,
前端:如果需要cookie,需要添加 axios.defaults.withCredentials = true;
仅需要前端处理:
可以直接手动写XML方法,手动配置access-control-allow-origin:*
6、 nginx代理跨域?
所谓代理就是在我们和真实的服务器之间有一台代理服务器,我们所有的请求都是通过它来进行转接的。
Nginx服务器中,监听同一个域名和端口,不同路径转发到客户端和服务器,把不同端口和域名的限制通过反向代理,来解决跨域问题。
7、nodejs中间件代理跨域?
利用 node.js 的中间件去处理跨域,类似于将跨域请求交给第三方,第三方去访问指定的网络,获取数据然后返回
中间插件:koa-server-http-proxy