angularjs - 重新定义的跨域请求。我做错了什么?

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

我有域名 sub.example.com使用配置的重定位:

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

然后我正在通过以下方式 build 其他工厂:
return Restangular.withConfig(function(RestangularProvider) {
    RestangularProvider.setBaseUrl('http://api.example.com');
});

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

//更新

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

最佳答案

我找到了解决方案。

起初,当使用凭证时 - 我们不能使用 * 作为 Access-Control-Allow-Origin。
然后,XHR 发送应妥善处理的 OPTIONS 请求并发送 CORS header 。

// 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请求了。

关于angularjs - 重新定义的跨域请求。我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22526903/

相关文章:

angularjs - 字符串表达式不能与 ng-bind 指令一起使用,而数字表达式可以吗?

javascript - $compile 动态添加行以使用 ngClick - AngularJS

javascript - 如何使用 Javascript 从 Iframe 实现跨域 URL 访问?

javascript - jQuery $.get 从 https 站点到 http

c# - 消除 ASP.NET 网站和 ASP.NET WebAPI 的跨域/子域 OPTIONS 请求

css - 边界半径不被尊重使用 Bootstrap 和 Angular Material

angularjs - 从 1.3.7 升级时使用 LiveReload 到达 AngularJS 1.5.+ 的推荐方法是什么?

javascript - 拼图 : different domain iframe needs to dynamically "overlap" parent content

AngularJS $http、CORS 和 http 身份验证

node.js - React/Node/Express 和 google OAuth 的 CORS/CORB 问题