CORS跨域相关知识整理

在前后端分离的项目中,以往跨域一般采用JSONP的方式,但是JSONP只支持GET请求,所以现在一般都不会采用JSONP的方式来处理跨域了。现在基本都是使用CORS的方式,要么在nginx中配置,如add_header 'Access-Control-Allow-Origin' *;add_header 'Access-Control-Allow-Methods' *;
要么就在后台服务器中配置response.setHeader("Access-Control-Allow-Origin", "*");......以往只知道copy过来就Ok了,从未思考过这些参数的代表的意思。直到最近在钉钉应用的开发中踩到了坑,最终发现还是Access-Control-Allow-Headers配置为*导致不生效。所以对CORS做了较为深入的了解以及整理。

image

SpringBoot2.x版本关于CORS的配置

@Configuration
public class WebConfiguration implements WebMvcConfigurer {
    /**
     * 跨域设置
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowCredentials(true)
                .allowedMethods("*")
                .allowedHeaders("*");
    }
}

SpringBoot1.x版本

@WebFilter(filterName = "corsFilter")
@Configuration
public class CorsFilter implements Filter {
    @Override
    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-Credentials", "true");
        response.setHeader("Access-Control-Allow-Methods", "*");
        response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
        chain.doFilter(req, res);
    }
}

参考
https://www.w3.org/TR/cors/
http://www.ruanyifeng.com/blog/2016/04/cors.html

你可能感兴趣的:(CORS跨域相关知识整理)