【问题标题】:Angular $http is sending OPTIONS instead of PUT (not POST)Angular $http 正在发送 OPTIONS 而不是 PUT(不是 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 限制

标签: python angularjs http-headers cors put


【解决方案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 限制
猜你喜欢
  • 2015-07-27
  • 1970-01-01
  • 2017-08-09
  • 2021-11-13
  • 2017-03-22
  • 2014-04-16
  • 1970-01-01
  • 2013-05-14
相关资源
最近更新 更多