使用AngularJS在Firefox中更改请求标头时遇到问题

时间:2014-06-28 09:07:20

标签: angularjs firefox post http-headers content-type

我的后端需要'内容类型'请求标题完全是' application / json'。这是一个CORS请求,Chrome中的一切正常。确切的标题,来自开发人员工具网络标签源:

Content-Type: application/json

我使用$ http.default.headers.post在AngularJS中设置它,它在Chrome中运行良好。但它在Firefox中不起作用。 Firefox发送此代码:

Content-Type: application/json; charset=UTF-8

我试图通过以下方式更改标题:

  • 设置$ http.default.headers(对于.post,.common)
  • 为一个请求设置自定义标头
  • 使用$ http拦截器

所有这些方法都适用于Chrome,但不适用于Firefox。 请求包含数据

如果我删除了“内容类型”'标题全部在一起,它仍然被发送,但它是:

Content-Type: text/plain; charset=UTF-8

(这在Chrome和Firefox中都会发生)。

这让我觉得浏览器强制标题:) 我怎样才能在Firefox中绕过这个?

1 个答案:

答案 0 :(得分:6)

Firefox有charset=UTF-8 hard-coded for string payloads

然而,您可以发送Blob代替:

var r = new XMLHttpRequest();
r.open("POST", ...);
r.send(new Blob(
 [JSON.stringify({a:1})],
 {type:"application/json"}
));

对于角度$http XHR包装器,这也可以完美地运行:

$http({
    method: "POST",
    url: "/echo/json",
    headers: {
        "Content-Type": "application/json"
    },
    data: new Blob([JSON.stringify({
        a: 1
    })])
});

Fiddle