Angular cross-domain post: 使用某些浏览器失败
Angular cross-domain post: fails using some browsers
我在 Angular (1.4.0) 中有一个 cross-domain POST 请求,在之后使用 Chrome (43+) 和 Firefox (37+)我删除了 Content-Type header.
但是在使用 Safari 时失败,或者在 iPhone/iPad 上使用 Safari/Chrome。
然后错误消息是:
Failed to load resource: Request header field Content-Type is not
allowed by Access-Control-Allow-Headers.
但是在日志中我可以看到:
[Log] original httpProvider defaults (app.js, line 6)
[Log] Content-Type: application/json;charset=utf-8 (app.js, line 7)
[Log] updated httpProvider defaults (app.js, line 13)
[Log] Content-Type: undefined (app.js, line 14)
[Error] Failed to load resource: Request header field Content-Type is not allowed by Access-Control-Allow-Headers. (search, line 0)
...
headers: Object
Accept: "application/json, text/plain, */*"
因此:即使 header 中没有 Content-Type,也会出现错误消息。
有什么建议吗?
片段:
var app = angular.module('myApp', []);
app.config(['$httpProvider', function($httpProvider) {
console.log("original httpProvider defaults");
console.log("Content-Type:", $httpProvider.defaults.headers.post['Content-Type']);
//$httpProvider.defaults.useXDomain = true;
//delete $httpProvider.defaults.headers.common["X-Requested-With"];
delete $httpProvider.defaults.headers.post['Content-Type'];
console.log("updated httpProvider defaults");
console.log("Content-Type:", $httpProvider.defaults.headers.post['Content-Type']);
}]);
app.controller('testController', function($scope, $http, $sce) {
console.log("testController");
$scope.url = "http://.../v0/search";
$scope.data = { "query":"auto" };
$scope.testPost = function() {
$http.post($scope.url, $scope.data).
success(function(data, status, headers, config) {
console.log("success");
console.log(data, status, headers, config);
}).
error(function(data, status, headers, config) {
console.log("error");
console.log(data, status, headers, config);
});
}
});
抱歉打扰了,毕竟是服务器问题。 API 提供者更新了他们的 API,现在可以使用了。
我还是有点好奇是什么导致服务器对同一个请求的处理方式与不同的浏览器不同,
当日志记录告诉我未设置 header 字段时,我真的不明白错误消息。
但它现在正在运行,这才是最重要的。
我在 Angular (1.4.0) 中有一个 cross-domain POST 请求,在之后使用 Chrome (43+) 和 Firefox (37+)我删除了 Content-Type header.
但是在使用 Safari 时失败,或者在 iPhone/iPad 上使用 Safari/Chrome。 然后错误消息是:
Failed to load resource: Request header field Content-Type is not allowed by Access-Control-Allow-Headers.
但是在日志中我可以看到:
[Log] original httpProvider defaults (app.js, line 6)
[Log] Content-Type: application/json;charset=utf-8 (app.js, line 7)
[Log] updated httpProvider defaults (app.js, line 13)
[Log] Content-Type: undefined (app.js, line 14)
[Error] Failed to load resource: Request header field Content-Type is not allowed by Access-Control-Allow-Headers. (search, line 0)
...
headers: Object
Accept: "application/json, text/plain, */*"
因此:即使 header 中没有 Content-Type,也会出现错误消息。
有什么建议吗?
片段:
var app = angular.module('myApp', []);
app.config(['$httpProvider', function($httpProvider) {
console.log("original httpProvider defaults");
console.log("Content-Type:", $httpProvider.defaults.headers.post['Content-Type']);
//$httpProvider.defaults.useXDomain = true;
//delete $httpProvider.defaults.headers.common["X-Requested-With"];
delete $httpProvider.defaults.headers.post['Content-Type'];
console.log("updated httpProvider defaults");
console.log("Content-Type:", $httpProvider.defaults.headers.post['Content-Type']);
}]);
app.controller('testController', function($scope, $http, $sce) {
console.log("testController");
$scope.url = "http://.../v0/search";
$scope.data = { "query":"auto" };
$scope.testPost = function() {
$http.post($scope.url, $scope.data).
success(function(data, status, headers, config) {
console.log("success");
console.log(data, status, headers, config);
}).
error(function(data, status, headers, config) {
console.log("error");
console.log(data, status, headers, config);
});
}
});
抱歉打扰了,毕竟是服务器问题。 API 提供者更新了他们的 API,现在可以使用了。
我还是有点好奇是什么导致服务器对同一个请求的处理方式与不同的浏览器不同, 当日志记录告诉我未设置 header 字段时,我真的不明白错误消息。 但它现在正在运行,这才是最重要的。