我在服务器端使用Java Jersey和Jetty,并拥有以下代码:
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并拥有以下代码:
/app/adapters/application.js:
import DS from 'ember-data';
export default DS.RESTAdapter.extend({
host: 'http://127.0.0.1:20000',
ajax(url, method, hash) {
hash = hash || {};
hash.crossDomain = true;
hash.xhrFields = {
withCredentials: true
};
return this._super(url, method, hash);
}
});
代码组合起作用,它将COOKIE作为请求的一部分发送,并解决了Access-Control-Allow-Origin问题。
然而,我担心的是" http://localhost:4200"是硬编码的。虽然在部署之前这不是问题,但我认为这仅限制来自http://localhost:4200的流量?它是一个Web应用程序,显然我需要允许来自任何地方的任何客户端访问。我需要对代码进行哪些更改?
答案 0 :(得分:1)
显然我需要允许来自任何地方的任何客户端进行访问
我认为这里存在误解。 Access-Control-Allow-Origin
指定客户端应用程序的服务器。
您的客户端应用程序是否在特定来源上运行?
profiles
。通过这样做,您可以在生产配置文件中定义客户端应用程序服务器的来源。"*"
接受 cors过滤器中的所有来源。如果这段代码是由您编写的,则只需参数化第二个参数以提供客户端的主机名。它应该是:request.getRemoteHost();
。