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

使用AngularJS在Firefox中更改请求头时遇到问题,angularjs,firefox,post,http-headers,content-type,Angularjs,Firefox,Post,Http Headers,Content Type,我的后端要求“Content-Type”请求头完全是“application/json”。这是一个CORS请求,在Chrome中一切正常。确切的标题,来自开发者工具网络选项卡来源: Content-Type: application/json 我用$http.default.headers.post在AngularJS中设置了它,它在Chrome中运行良好。但是它在Firefox中不起作用。Firefox发送以下消息: Content-Type: application/json; chars

我的后端要求“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”标题,它仍然会被发送,但它是:

Content-Type: text/plain; charset=UTF-8
(这在Chrome和Firefox中都会发生)

这使我认为浏览器强制使用标题:)
我如何在Firefox中避免这种情况?

Firefox具有
charset=UTF-8

但是,您可以改为发送:

这同样适用于angular
$http
XHR包装器:

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

我提出了一个愚蠢的问题:你不能让你的后端接受一个完全正常的HTTP头吗?你永远不知道Chrome何时/是否突然决定也开始执行它。后端不是我的——我使用的是LimeSurvey RemoteControl API,它有点太敏感了。我可以在Web服务器中转换请求-我刚才这样做了,哪种解决了问题,但不是问题。是的,我把它作为评论,而不是答案。谢谢你的解释。我不想把它作为一个Blob发送,因为我似乎无法以这种方式利用AngularJS。感谢您提供有关硬编码的信息。快把我逼疯了:)
$http({
    method: "POST",
    url: "/echo/json",
    headers: {
        "Content-Type": "application/json"
    },
    data: new Blob([JSON.stringify({
        a: 1
    })])
});