我尝试从javascript客户端发出POST调用到名为addvenue的foursquare API。 这是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问题。在我的情况下,服务器允许所有来源,如响应标头中所示。我对此问题感到震惊,无法继续下去。
任何帮助将不胜感激。 提前谢谢。
答案 0 :(得分:1)
请求方法:选项
客户端正在向服务器发出飞行前OPTIONS请求。
在进行非简单(例如非GET)跨域(CORS)请求之前,浏览器会自动发出OPTIONS请求。
OPTIONS请求的目的是与服务器进行快速检查,以确保允许客户端在实际进行POST之前进行POST。因此,客户端发出1或2个请求。
OPTIONS请求,如果OPTIONS请求成功响应(不是405),则进行POST。
OPTIONS请求很可能失败,因为您的服务器响应中未说明您的服务器支持OPTIONS请求。
将此标题添加到服务器响应中..
Access-Control-Allow-Methods: POST, GET, PUT, DELETE, OPTIONS
然后它应该全部工作。
有关详细信息,请参阅https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests