javascript - angularjs 中的 $http POST 调用返回 HTTP 状态代码 405

标签 javascript angularjs http-post cors foursquare

我尝试从 javascript 客户端对名为 addvenue 的 foursquare API 进行 POST 调用。 这是 API 端点 documentation link .
但服务器返回 405 - 方法不允许。这是调用电话的片段

var postdata = {'oauth_token':$scope.access_token_foursquare,
                        'v':'20141217','name':'randomlisting',
                        'll':'44.3,37.2','m':'foursquare'};
var req = {
            method: 'POST',
            url: 'https://api.foursquare.com/v2/venues/add',
            headers: {
              'content-type': 'application/x-www-form-urlencoded'
            },
            data: postdata
          }

$http(req).then(function(response){
      console.log(response);
           });

以下是上述调用的请求和响应包。

Remote Address:103.245.222.185:443
Request URL:https://api.foursquare.com/v2/venues/add
Request Method:OPTIONS
Status Code:405 Method Not Allowed

**Request Headers**
Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:accept, authorization, content-type
Access-Control-Request-Method:POST
Connection:keep-alive
Host:api.foursquare.com
Origin:http://localhost:9000
Referer:http://localhost:9000/foursquare
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36

**Response Headers**

Accept-Ranges:bytes
Access-Control-Allow-Origin:*
Connection:Keep-Alive
Content-Length:90
Content-Type:application/json; charset=utf-8
Date:Wed, 17 Dec 2014 12:15:15 GMT
Keep-Alive:timeout=10, max=50
Server:nginx
Tracer-Time:1
Via:1.1 varnish
X-Cache:MISS
X-Cache-Hits:0
X-Served-By:cache-sn87-SIN

我也研究过 CORS 问题。在我的例子中,服务器允许所有来源,如响应 header 中所示。我对这个问题感到震惊,无法进一步处理。

如有任何帮助,我们将不胜感激。 提前致谢。

最佳答案

Request Method:OPTIONS

客户端正在向服务器发出飞行前 OPTIONS 请求。

在发出非简单(例如不是 GET)跨域 (CORS) 请求之前,浏览器会自动发出 OPTIONS 请求。

OPTIONS 请求的目的是与服务器进行快速检查,以确保允许客户端在实际进行 POST 之前进行 POST。因此客户端发出 1 或 2 个请求。

OPTIONS 请求,如果 OPTIONS 请求成功响应(不是 405),则进行 POST。

OPTIONS 请求失败很可能是因为您没有在服务器响应中说明您的服务器支持 OPTIONS 请求。

将此 header 添加到您的服务器响应..

Access-Control-Allow-Methods: POST, GET, PUT, DELETE, OPTIONS

那么它应该一切正常。

参见 https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests了解更多信息

关于javascript - angularjs 中的 $http POST 调用返回 HTTP 状态代码 405,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27526034/

相关文章:

javascript - 如何在 Canvas 中模拟 z-index

javascript - {lang :(? :da|en)} do in Javascript? 是什么

javascript - Angular orderBy 字符串(数字范围)作为 Number

javascript - 通过ajax请求发送post数据在参数中使用变量

rest - 为什么我不能在Flutter中执行rest api请求

javascript - 为什么我的 jQuery 不响应窗口大小调整?

javascript - jQuery .add 方法似乎不起作用?

javascript - Angularjs指令拖放,需要添加列

javascript - 如何在行中没有任何按钮的情况下在 Angular Js 中使用内联编辑

ajax - 如何处理ajax/http-post请求(responsetype : arraybuffer) using nodejs+express in the backend