【问题标题】:Access-Control-Allow-Origin error in ember.jsember.js 中的 Access-Control-Allow-Origin 错误
【发布时间】:2017-06-15 14:43:19
【问题描述】:

我正在使用 ember.js,它向我抛出了这个错误:

XMLHttpRequest 无法加载 http://127.0.0.1:20000/accounts/0。回复 预检请求未通过访问控制检查:否 'Access-Control-Allow-Origin' 标头出现在请求的 资源。因此不允许使用原点“http://localhost:4200” 访问。

在我的服务器端,我放置了代码来打印 GET、POST 和 PUT 调用的日志。它不会打印出任何东西。因此,我认为客户端从未向服务器发出任何请求。 (但是,手动访问 'http://127.0.0.1:20000/accounts/0' 确实调用了 GET 方法上的日志。)

服务器端已经编码为返回 Access-Control-Allow-Origin 并且它适用于其他方法。

那么,我的问题是什么?

为了记录,Java 中的服务器端是:

responseBuilder.header("Access-Control-Allow-Origin", "http://localhost:4200");
responseBuilder.header("Access-Control-Allow-Headers", "origin, content-type, accept, authorization, auth-token");
responseBuilder.header("Access-Control-Allow-Credentials", "true");
responseBuilder.header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
responseBuilder.allow("OPTIONS");

在我的 ember.js config/environment.js 我有:

ENV['contentSecurityPolicy'] = {
        'default-src': "*"
    };

【问题讨论】:

  • preflight 表示OPTIONS 请求。
  • 也允许 OPTIONs 请求
  • 端口匹配吗?不同的端口 = 不同的域,所以 localhost:4200 与 127.0.0.1:20000 不是同一个域
  • 好吧,错误表明 localhost:4200 被拒绝......所以这应该允许它,一旦允许 OPTIONS 也是如此
  • 调试后发现上面的错误是Chrome向服务器发起HTTP OPTIONS请求引起的。我在服务器端添加了日志记录代码并确认了它。我仍在努力解决整个问题...

标签: javascript ember.js cors


【解决方案1】:

已解决:

private static void setAccessControlAllowOrigin(ServletContextHandler context) {
        FilterHolder holder = new FilterHolder(CrossOriginFilter.class);
        holder.setInitParameter(CrossOriginFilter.ALLOWED_ORIGINS_PARAM, "*");
        holder.setInitParameter(CrossOriginFilter.ACCESS_CONTROL_ALLOW_ORIGIN_HEADER, "http://127.0.0.1:4200");
        holder.setInitParameter(CrossOriginFilter.ALLOWED_METHODS_PARAM, "GET,POST,PUT,HEAD");
        holder.setInitParameter(CrossOriginFilter.ALLOWED_HEADERS_PARAM, "X-Requested-With,Content-Type,Accept,Origin");
        holder.setName("cross-origin");
        FilterMapping fm = new FilterMapping();
        fm.setFilterName("cross-origin");
        fm.setPathSpec("*");
        context.getServletHandler().addFilter(holder, fm);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-12
    • 2017-06-15
    • 2014-03-05
    • 2021-06-17
    • 2017-12-06
    • 2019-08-08
    • 2023-01-13
    • 2017-09-20
    相关资源
    最近更新 更多