我正在使用具有不同URL的ember数据,因为我正在从ember-rails转移到外部ember应用程序,因此API网址为http://localhost:5000
,而ember应用程序为http://localhost:9000
。
现在问题是我需要包含x-appid
和x-app-secret
,但每当为其中任何一个添加xhr.setRequestHeader()
时,GET
请求都会变为OPTIONS
请求。
当我在同一个域使用ember-rails时,此代码工作正常,这是问题还是还有其他缺失?
ajax: function(url, type, hash) {
if (this.headers !== undefined) {
var headers = this.headers;
if (hash) {
hash.beforeSend = function (xhr) {
// Works fine
xhr.setRequestHeader('Accept', 'application/vnd.vendor+json;version=1');
// Changes Request from GET to OPTIONS
xhr.setRequestHeader('x-vendor-appid', '12412412');
xhr.setRequestHeader('x-vendor-secret', 'aslkdfjaskldfjasd');
};
}
}
return this._super(url, type, hash);
}
答案 0 :(得分:1)
浏览器正在发送OPTIONS请求,因为请求的域名与您网页的域名不匹配。这会触发Cross-Origin Resource Sharing (CORS)限制。
您需要响应来自服务器的CORS请求,告诉客户端允许通过设置几个HTTP头字段向域发出CORS请求。然后,浏览器将发出原始请求。我用ember.js / rails实现了这个。