矩形跨域请求。我做错了啥?

Posted

技术标签:

【中文标题】矩形跨域请求。我做错了啥?【英文标题】: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 【参考方案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 在发送任何标头之前在后端的任何位置。

以上是关于矩形跨域请求。我做错了啥?的主要内容,如果未能解决你的问题,请参考以下文章

sectionName TableView - 我做错了啥?

Firestore - 我做错了啥?

这个Lua代码我做错了啥

单对象 json 解析 - 我做错了啥?

QTreeView 的 QAbstractItemModel:我做错了啥?

JSON.parse,我做错了啥?