前后端分离开发,各司其职,分工明确,加上现在大前端的发展的火热,所以分离开发必定是一个趋势,分离开发就一定会遇到跨域的问题。
还是之前的意见,个人认为最好的解决方案是通过服务器的反向代理来解决。
当然根据项目的具体,有些时候也会采取不同的解决方案,
今天这里介绍一下cors解决,这里是站在服务端的角度,讲解需要做的工作,服务端语言为java
CORS
com.thetransactioncompany.cors.CORSFilter
cors.allowOrigin
*
cors.supportedMethods
GET, POST, HEAD, PUT, DELETE
cors.supportedHeaders
Accept, Origin, X-Requested-With, Content-Type, Last-Modified
cors.exposedHeaders
Set-Cookie
cors.supportsCredentials
true
CORS
/*
参数讲解
cors.allowOrigin指的可以通过的ip,*代表所有,可以使用指定的ip,多个的话可以用逗号分隔,默认为*
cors.supportedMethods指的是请求方式 默认为*
cors.supportedHeaders请求支持的头信息,默认为*
cors.exposedHeaders暴露的头信息,默认的empy list
cors.supportsCredentials支持证书,默认为true
cors.maxAge 最大过期时间,默认为-1
cors.tagRequests 默认为false
cors.allowSubdomains允许子域 默认为false
具体可以查看com.thetransactioncompany.cors.CORSConfiguration这个类的源码
官网文档:
http://software.dzhuvinov.com/cors-filter-configuration.html
这里提供一个简单的实现
@Component
public class SimpleCORSFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
chain.doFilter(req, res);
}
public void init(FilterConfig filterConfig) {}
public void destroy() {}
}
回到web.xml里面配置的filter,使用的jar的依赖为:
com.thetransactioncompany
cors-filter
2.5
org.ebaysf.web
cors-filter
1.0.1