前后端分离了,跨域问题怎么处理?

  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代码,在后台请求银行网站的信息,那客户的信息就这样被泄露了。

更多干货关注weixin “SpringForAll社区”

那怎么办呢?

解决跨域问题有很多方式,网上有很多,但是有些方式虽然可行,但是看着很不输入也有很多弊端,这里介绍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代理

将前端部署在Nginx下,Nginx作为调用后端服务的代理,这样前端的所有请求都直接指向Nginx地址,而由Nginx去具体请求后端服务。这样对于前端来说,它所有的请求都是在本域下发起的,就没有跨域的问题了。

本文由博客一文多发平台 OpenWrite 发布!

你可能感兴趣的