【问题标题】:Access-Control-Allow-Origin error for cross platform跨平台的访问控制允许来源错误
【发布时间】:2015-11-14 18:12:26
【问题描述】:

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

XMLHttpRequest 无法加载 http://prodservices.apps.h2radio.com:8080/util-services/contributor/feedback。请求的资源上不存在“Access-Control-Allow-Origin”标头。 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);

即使我遇到同样的错误,我也不知道如何解决它。谁能给我上车的诀窍。

【问题讨论】:

    标签: ajax spring cors


    【解决方案1】:

    Access-Control-Allow-Credentials 设置为true 时,* 将不能作为Access-Control-Allow-Origin 工作。因此,请尝试指定确切的基本 URL,例如http://localhost:9000.

    您可以使用属性,而不是硬编码 URL。如果多个站点可以访问您的服务器,那么一种常见的做法是动态获取站点的基本 URL 并根据 whilelist 检查它。我有这样的:

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

    这不是一个好的做法,但如果您必须允许所有 URL,只需将 * 替换为 request.getHeader("Origin")

    【讨论】:

    • 很高兴如果它有帮助。如果,您可能希望接受答案(通过单击对勾)并对其进行投票(通过单击向上箭头)。
    猜你喜欢
    • 2013-03-02
    • 1970-01-01
    • 2014-11-01
    • 2017-01-10
    • 1970-01-01
    相关资源
    最近更新 更多