POST 请求 (AngularJS $http) 出现 405 错误

405 Error with POST request (AngularJS $http)

我想使用 AngularJS $http 对 Google 联系人 API 执行 post 请求。

我试过这样做:

var config = {
    headers: {
        // "Content-Type": "application/json",
        "Authorization": "Bearer " + gapi.auth.getToken().access_token,
        "GData-Version": "3.0"
    }
}

var data = {
    "test": "test"
}

$http.post('https://www.google.com/m8/feeds/contacts/default/full/', data, config);

但它 returns“XMLHttpRequest 无法加载 https://www.google.com/m8/feeds/contacts/default/full/。预检响应具有无效的 HTTP 状态代码 405

此请求正在像 Postman 这样的 RestClient 上运行(returns 201 创建)。

如果有人可以向我解释为什么浏览器不允许使用此方法。

我认为问题在于 https://www.google.com/m8/feeds/contacts API 根本不支持 OPTIONS 请求。 405 响应本质上是说端点不支持 OPTIONS 请求,不一定不支持 POST.

解决方案是使用 Google 自己的 JavaScript API library 而不是 Angular 的 $http 服务。

You can use the JavaScript client library to interact with Google APIs, such as People, Calendar, and Drive, from your web applications.

还有 some documentation 关于 Google 的 API 库如何支持 CORS 请求。

可能有一些 Angular 这个库的包装版本可以让你的生活更轻松,但我还没有深入研究。