【发布时间】:2015-10-22 07:18:21
【问题描述】:
我有以下配置。
.config(config);
config.$inject = ["$httpProvider"];
function config($httpProvider) {
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common["X-Requested-With"];
//Reset headers to avoid OPTIONS request (aka preflight)
$httpProvider.defaults.headers.common = {};
$httpProvider.defaults.headers.post = {};
$httpProvider.defaults.headers.put = {};
$httpProvider.defaults.headers.patch = {};
}
至于我的$resource
.factory('Order', order)
order.$inject = ['$resource', "ApiEndpoint", "UserRecord"];
function order($resource, ApiEndpoint, UserRecord) {
var id = null;
UserRecord.retrieve().then(function (user) {
id = user.user_id;
})
return $resource(ApiEndpoint.url + 'orders.json', {}, {
update: {method: 'PUT', url: ApiEndpoint.url + 'orders.json'}
});
}
现在当我这样调用更新时
var params = { name: "new name" };
Order.update(params, {}, function (resp) {
console.log(resp);
})
我的控制台将No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8100' is therefore not allowed access. The response had HTTP status code 401. 呈现为 OPTIONS 请求。如果我运行 POST 请求,则一切正常并按预期运行。
当我访问服务器日志时,它会验证我正在运行 OPTIONS 请求。如何解决此问题以运行 PUT 请求?
【问题讨论】:
-
为什么不直接让服务器响应 OPTIONS 请求呢?
-
脚本的url是什么,脚本请求的资源的url是什么?如果存在,请包含协议和子域。
-
脚本的url和资源的url不一样。 localhost:8100 与普通域相比。该域没有子域。
标签: javascript angularjs http-headers angular-resource http-method