前后端分离了,跨域问题如何解决?
1. 利用Nginx反向代理解决跨域问题
2. 使用jsonp 来进行解决,不推荐,老项目可以使用此方案,但是发送的http 请求体有大小限制,并且发送方式为get方式,大小限制、不安全。
3. 服务器代理
4. CORS 请求头允许跨域,利用nginx或者php、java等后端语言设置允许跨域请求 header('Access-Control-Allow-Origin:*');//允许所有来源访问 header('Access-Control-Allow-Method:POST,GET');//允许访问的方式
5. 设置SpringSecurity允许OPTIONS请求访问
跨域的本质:
究其本质,是因为一个域下的资源(包括文档或脚本程序等)试图访问另一个域下的资源。
为什么会被拒绝:
这样的跨域请求被拒绝的原因是浏览器的同源策略(SOP)。
什么是同源策略:
所谓同源策略,简单来说,源就是{协议,主机,端口}定义的,只有这些值完全一样才认为两个资源是同源的。
为什么要有同源策略:
安全,如果没有同源策略,那所有其他域都可以向非本域发送请求,假设一个场景,用户在浏览自己的银行信息,看完之后直接关闭页面,但是默认情况session不会立即失效,这时他如果登录了一个具有恶意的js代码,在后台请求银行网站的信息,那客户的信息就这样被泄露了。
那怎么办呢?
解决跨域问题有很多方式,网上有很多,但是有些方式虽然可行,但是看着很不输入也有很多弊端,这里介绍2种我认为最佳的解决方式。
1. 跨域资源共享(CORS)
CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10,以java为例,只需要在Response的头部增加响应的信息即可,Talk is cheap, Show you the code.
CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。它允许浏览器向跨源服务器,发出XMLHttpRequest
请求,从而克服了AJAX只能同源使用的限制。
2. nginx代理
如果资源对你有帮助的话
❤️ 给个 「在看」 ,是最大的支持