您好我正在尝试发布有关跨域的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);
即使我得到同样的错误,我也不知道如何解决它。任何人都可以给我一些诀窍。
答案 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")
。