【问题标题】:Restangular crossdomain request. What I do wrong?矩形跨域请求。我做错了什么?
【发布时间】:2014-04-26 22:33:33
【问题描述】:

我的域sub.example.com 配置了restangular:

RestangularProvider.setDefaultHeaders({
    'Content-Type': 'application/json',
    'X-Requested-With': 'XMLHttpRequest'
});
RestangularProvider.setDefaultHttpFields({
    'withCredentials': true
});

然后我正在通过以下方式建造其他工厂:

return Restangular.withConfig(function(RestangularProvider) {
    RestangularProvider.setBaseUrl('http://api.example.com');
});

而且,显然,得到错误 请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'http://sub.example.com' 不允许访问。。我应该如何配置服务器/客户端以获取有效的跨域请求?

//更新

我在后端使用 Yii 并发送下一个标头
header('Access-Control-Allow-Origin: *', true);

【问题讨论】:

  • 您的服务器端标头似乎不正确:键和值对都在键端 - 因此映射没有任何意义。 (Access-Control-Allow-Origin, "*") 见enable-cors.org/server_apache.html

标签: angularjs cross-domain cors restangular cross-domain-policy


【解决方案1】:

我找到了解决办法。

首先,在使用凭据时 - 我们不能将 * 用于 Access-Control-Allow-Origin。 然后,XHR 发送应该处理好的 OPTIONS 请求并发送 CORS 头。

// scheme required, here can be multiple origins concatenated by space if using credentials
header('Access-Control-Allow-Origin: http://sub.example.com');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
header('Access-Control-Allow-Headers: Accept, X-Requested-With');
// without credentials we can use * for origin
header('Access-Control-Allow-Credentials: true');
header('HTTP/1.1 200 OK', true);

那么我们就可以简单的使用跨域ajax请求了。

【讨论】:

  • 感谢您的跟进。我遇到了完全相同的问题。
  • @ChuckConway np。很高兴看到我的回答对某人有所帮助。
  • 很迷茫我该如何设置?
  • 我猜这是一些 API 端的 PHP。
  • @AJ_83 在发送任何标头之前在后端的任何位置。
猜你喜欢
  • 2011-10-22
  • 2017-03-25
  • 2011-03-30
  • 1970-01-01
  • 1970-01-01
  • 2019-07-31
  • 2023-03-31
  • 1970-01-01
  • 2016-02-03
相关资源
最近更新 更多