矩形跨域请求。我做错了啥?
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 - 我做错了啥?