“Access-Control-Allow-Origin”标头包含多个值“*、*”,但只允许一个。在 Chrome 和 Firefox 中
Posted
技术标签:
【中文标题】“Access-Control-Allow-Origin”标头包含多个值“*、*”,但只允许一个。在 Chrome 和 Firefox 中【英文标题】:The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed. in Chrome and Firefox 【发布时间】:2015-03-02 07:32:40 【问题描述】:我收到错误:“Access-Control-Allow-Origin”标头包含多个值“*、*”,但只允许一个值。当我从我的申请。
这不是 webapi 服务调用的问题,因为当我跟踪来自 fiddler 的调用时,我得到了 Result with 200 。但是即使在我得到 200 结果之后,来自 $http.post 的调用也会引发错误。我不知道为什么。它适用于 IE,但不适用于 Chrome 或 Firefox。
在 chrome 和 Firefox 中抛出我:XMLHttpRequest 无法加载 **url。 “Access-Control-Allow-Origin”标头包含多个值“*、*”,但只允许一个。 Origin url 因此不允许访问。**
请建议我需要在 Chrome 和 Firefox 中更改哪些设置来运行符文。
$http.post(serviceBase + 'token', data, headers: 'Content-Type': 'application/x-www-form-urlencoded' ).success(function (response)
if (loginData.useRefreshTokens)
localStorageService.set('authorizationData', token: response.access_token, userName: loginData.userName, refreshToken: response.refresh_token, useRefreshTokens: true );
else
localStorageService.set('authorizationData', token: response.access_token, userName: loginData.userName, refreshToken: "", useRefreshTokens: false );
_authentication.isAuth = true;
_authentication.userName = loginData.userName;
_authentication.useRefreshTokens = loginData.useRefreshTokens;
deferred.resolve(response);
).error(function (err, status)
_logOut();
deferred.reject(err);
);
【问题讨论】:
从服务器端,将标头设置为*
而不是*,*
感谢您的评论,但我可以知道怎么做吗?
我投票结束这个问题,因为它已经 6 年了,这是一个服务器端问题,我怀疑这些细节是否会在这个问题中提供。
【参考方案1】:
如果您使用 JAVA 作为后端服务,那么您可能需要对 HTTPRequest 应用 CORS 过滤器。您可以通过添加如下所示的 filterClass 来做到这一点......
@Component
public class CorsFilter extends OncePerRequestFilter
protected static Logger logger = LoggerFactory.getLogger(CorsFilter.class);
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException
logger.info("entering FILTER page");
if (request.getHeader("Access-Control-Request-Method") != null && "OPTIONS".equals(request.getMethod()))
// CORS "pre-flight" request
response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
response.addHeader("Access-Control-Max-Age", "1800");//30 min
//This will filter your requests and responses.
filterChain.doFilter(request, response);
【讨论】:
以上是关于“Access-Control-Allow-Origin”标头包含多个值“*、*”,但只允许一个。在 Chrome 和 Firefox 中的主要内容,如果未能解决你的问题,请参考以下文章