我的问题是在我的应用程序运行localhost:8080上的angularjs $ http调用
var url "https://api.acme.com/RX/v1/user";
$http.get(url).success(function (data) {
alert('yay');
$scope.user = data;
});
Run Code Online (Sandbox Code Playgroud)
第一个请求成功,Chrome记录了以下响应:
Status Code:302 Found
Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin:http://localhost:8080
Location:https://login.acme.com/cas/login?service=https%3A%2F%2Fapi.acme.com%2FRX%2Fv1%2Fuser
Run Code Online (Sandbox Code Playgroud)
这导致浏览器向重定向位置发出第二个GET请求:
https://login.acme.com/cas/login?service=https%3A%2F%2Fapi.acme.com%2FRX%2Fv1%2Fuser
Run Code Online (Sandbox Code Playgroud)
第二个请求失败,Chrome中报告了以下错误:
XMLHttpRequest cannot load https://login.acme.com/cas/login?service=https%3A%2F%2Fapi.acme.com%2FRX%2Fv1%2Fuser. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
Run Code Online (Sandbox Code Playgroud)
所以我有一个从源到URL的CORS请求,允许将请求重定向到另一个也配置为允许请求的URL.但是重定向请求失败了.我应该期待这个吗?
请注意,api.acme.com和login.acme.com都配置为允许使用所有来源
Access-Control-Allow-Origin: *
Run Code Online (Sandbox Code Playgroud)
该问题是由于 XHR 请求返回 302 时浏览器将 Origin 设置为 null 引起的。顺便说一句,这对我来说似乎很奇怪,因为将 302 与原始 Origin 一起制作肯定更有意义,而不是 null。
当 Origin null 到达我们的服务器时,那里的 apache tomcat CORS 实现(http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#CORS_Filter, tomcat 7.0.52 )不会返回 Access -Control-Allow-Origin 标头,即使服务器配置为允许所有来源。注意:此行为现已在当前版本的 Tomcat 7 中修复。
解决方案是在服务器上使用不同的 CORS 实现 ( http://software.dzhuvinov.com/cors-filter.html )。此过滤器返回 Access-Control-Allow-Origin: null 并且 302 XHR 成功。
尽管我已经找到了解决方案,但我仍然不确定两件事:
| 归档时间: |
|
| 查看次数: |
4088 次 |
| 最近记录: |