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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 什么是跨域 跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实...
    他方l阅读 1,075评论 0 2
  • 什么是跨域 跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实...
    Yaoxue9阅读 1,320评论 0 6
  • XMLHttpRequest的跨域请求 动态添加一个标签,而script标签的src属性是没有跨域的限制的。这样说...
    葛高召阅读 22,545评论 0 0
  • 什么是跨域 跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实...
    HeroXin阅读 848评论 0 4
  • Java跨域问题以及如何使用Cors解决前后端 分离部署项目所遇到的跨域问题 什么是跨域 跨域,指的是浏览器不能执...
    kevin0016阅读 2,759评论 0 6