【发布时间】: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