【问题标题】:The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed. in Chrome and Firefox“Access-Control-Allow-Origin”标头包含多个值“*、*”,但只允许一个。在 Chrome 和 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 年了,这是一个服务器端问题,我怀疑这些细节是否会在这个问题中提供。

标签: angularjs http post


【解决方案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);
    }

} 

【讨论】:

    猜你喜欢
    • 2015-06-13
    • 2021-06-21
    • 2019-10-02
    • 2019-11-05
    • 1970-01-01
    • 2018-10-28
    • 2016-10-02
    • 2020-02-04
    相关资源
    最近更新 更多