我有以下配置。
.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);
})
我的控制台呈现请求的资源上不存在“Access-Control-Allow-Origin” header 。因此,不允许访问源“http://localhost:8100”。响应的 HTTP 状态代码为 401。
作为 OPTIONS 请求。如果我运行 POST 请求,一切都会按预期正常工作。
当我访问服务器日志时,它会验证我正在运行 OPTIONS 请求。如何修复此问题以运行 PUT 请求?
最佳答案
您正在尝试发出 CORS(跨源资源共享)请求,这意味着您尝试连接到不是您的源的服务器。您的源是为您的应用程序提供服务的服务器。
由于浏览器安全策略,除 GET 之外的每个请求都需要预检握手(选项),其中非源服务器描述他允许来自源 X 的某人使用哪些 header 和方法。
因此,跳过预检的唯一方法是将您正在访问的资源放在为应用程序提供服务的同一服务器上。
关于javascript - 当我应该昏倒时传递选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31732136/