AngularJS $ http.post服务器不允许使用方法OPTIONS的请求

时间:2014-03-13 07:38:09

标签: angularjs angular-http

我正在尝试对服务器进行HTTP POST。

我必须发送的数据是一个json对象。

问题是,角度中的$ http.post会覆盖带有选项的方法。

我可以进行此配置

.config(['$httpProvider', function ($httpProvider) {
  //Reset headers to avoid OPTIONS request (aka preflight)
  $httpProvider.defaults.headers.common = {};
  $httpProvider.defaults.headers.post = {};
  $httpProvider.defaults.headers.put = {};
  $httpProvider.defaults.headers.patch = {};
}])

并从选项更改为POST,但我无法将内容类型设置为" application / json",而我正在获得" 415不支持的媒体类型"

谢谢

2 个答案:

答案 0 :(得分:6)

角度中的

$ http.post不会使用OPTIONS覆盖该方法。您似乎试图在不同的域中调用api而不是JS代码来自的域。这称为跨域。对于这种情况,浏览器使用OPTIONS执行预检请求以查看返回的标头。在后端响应中,您应该添加标题Access-Control-Allow-Origin: *。当浏览器看到该标题时,他会执行实际的POST请求。

此处有更多详情:https://developer.mozilla.org/en/docs/HTTP/Access_control_CORS

希望这有帮助!

答案 1 :(得分:1)

添加

$httpProvider.defaults.headers.post['Content-Type'] = 'application/json';

但请注意,这将全局设置Content-Type标头。

如果您需要为每次通话设置内容类型,则应使用$http.post之类的

 $http.post("/foo/bar", requestData, {
        headers: { 'Content-Type': 'application/json'},
        transformRequest: transform
    }).success(function(responseData) {
        //do stuff with response
    });