跨平台的Access-Control-Allow-Origin错误

时间:2015-08-20 22:28:24

标签: ajax spring cors

您好我正在尝试发布有关跨域的ajax调用的一些信息。不幸的是我得到了以下错误。

XMLHttpRequest无法加载http://prodservices.apps.h2radio.com:8080/util-services/contributor/feedback。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许来源“http://rivetnewsradio.com”访问

我搜索了上述错误,并在过滤器中集成了以下代码。

    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");
    response.setHeader("Access-Control-Allow-Headers", "origin, content-type, accept, x-requested-with, my-cool-header");
    response.setHeader("Access-Control-Allow-Credentials", "true");
     chain.doFilter(req, res);

即使我得到同样的错误,我也不知道如何解决它。任何人都可以给我一些诀窍。

1 个答案:

答案 0 :(得分:0)

*设置为Access-Control-Allow-Origin时,

Access-Control-Allow-Credentials无法作为true工作。因此,请尝试指定确切的基本网址,例如http://localhost:9000

您可以使用属性,而不是对网址进行硬编码。如果多个站点可以访问您的服务器,那么通常的做法是动态获取站点的基本URL并根据列表进行检查。我喜欢这样:

String origin = request.getHeader("Origin");

response.setHeader("Access-Control-Allow-Origin",
ArrayUtils.contains(properties.getAllowedOrigins(), origin) ?
    origin : properties.getDefaultApplicationUrl()); 

它不会被视为一种良好做法,但如果您必须允许所有网址,只需将*替换为request.getHeader("Origin")