Angular $http 正在发送 OPTIONS 而不是 PUT(不是 POST)
Posted
技术标签:
【中文标题】Angular $http 正在发送 OPTIONS 而不是 PUT(不是 POST)【英文标题】:Angular $http is sending OPTIONS instead of PUT (not POST) 【发布时间】:2016-06-14 01:33:43 【问题描述】:我已经阅读了关于这个 Angular 问题的所有问题,但是 Angular $http 发送的是 OPTIONS 而不是 PUT。 (使用 POST 一切正常)我们的项目在谷歌应用引擎(python)中
我有
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
在配置和
$scope.updateUser = function ()
/*$http.put(myurl,
admin: "on"
).success(function (result)
console.log(result);
$scope.resultPost = result;
).error(function (result)
console.log(result);
);*/
var uri = my url;
$http(
method: 'PUT',
url: uri,
headers: "Content-Type": "application/json;charset=UTF-8",
data:
);
;
任何关于解决方案的建议都会受到重视。
【问题讨论】:
与角度完全无关。它是浏览器发送 OPTIONS 作为跨域请求的 CORS 规范的一部分。您需要在服务器上启用 CORS。请查看浏览器控制台中的错误并用谷歌搜索该错误。每天都会出现很多次问题,并且有很多关于 CORS 的可用文档 在服务器上启用了 CORS。 POST 没有任何问题。 那么它没有正确启用。从浏览器开发工具网络的请求中复制响应标头并发布问题 我已经发布了响应头 好吧,您显示的那些标题清楚地表明了其他情况。如果他们使用 REST 客户端进行测试,则不会像浏览器那样受到 CORS 限制 【参考方案1】:在使用 CORS 时,使用 OPTIONS
方法发送请求是浏览器的正确行为。
在此处阅读有关 CORS 的更多信息:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
这篇文章解释了为什么需要这样做。更具体地说,标题为“预检请求”的部分:
与简单请求不同(上面讨论过),“预检”请求首先通过 OPTIONS 方法向另一个域上的资源发送 HTTP 请求,以确定实际请求是否可以安全发送
【讨论】:
为什么要从问题中删除 python 标签?如果 OP 在服务器上使用 python 肯定与情况相关 问题不是问任何关于 Python 的事情,OP 使用 GAE 是否无关紧要,他问的是他的 Angular 代码有什么问题。如何为 CORS 设置 GAE 与 Angular 无关,是另一个问题的主题。 但是 CORS 是服务器端的问题。同意问题需要修改,但您的回答并未说明这一点 postman 不像浏览器那样受 CORS 限制以上是关于Angular $http 正在发送 OPTIONS 而不是 PUT(不是 POST)的主要内容,如果未能解决你的问题,请参考以下文章
Angularjs 获取 OPTIONS 和 POST 请求
成功登录 API 请求后,Angular 会为每个 API 调用触发额外的 OPTION 请求