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

wih*_*rek 7 firefox post content-type http-headers angularjs

我的后端要求'Content-Type'请求标头正好是'application/json'.这是一个CORS请求,Chrome中的一切正常.来自开发人员工具网络标签源的确切标题:

Content-Type: application/json
Run Code Online (Sandbox Code Playgroud)

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

Content-Type: application/json; charset=UTF-8
Run Code Online (Sandbox Code Playgroud)

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

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

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

如果我一起删除'Content-Type'标题,它仍然会被发送,但它是:

Content-Type: text/plain; charset=UTF-8
Run Code Online (Sandbox Code Playgroud)

(这种情况发生在Chrome和Firefox中).

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

nma*_*ier 6

Firefox已charset=UTF-8 对字符串有效负载进行了硬编码.

但是你可以发送一个Blob代替:

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

这也适用于角度$httpXHR包装器:

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

小提琴