【问题标题】:trouble changing request headers in Firefox with AngularJS使用 AngularJS 在 Firefox 中更改请求标头时遇到问题
【发布时间】:2014-08-19 08:37:38
【问题描述】:

我的后端要求“Content-Type”请求标头完全是“application/json”。这是一个 CORS 请求,在 Chrome 中一切正常。确切的标题,来自开发者工具网络标签来源:

Content-Type: application/json

我在 AngularJS 中使用 $http.default.headers.post 进行了设置,它在 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 中规避这个问题?

【问题讨论】:

  • 来自我的愚蠢问题:你不能让你的后端接受一个完全正常的 HTTP 标头吗?你永远不知道 Chrome 何时/是否突然决定也开始执行它。
  • 后端不是我的——我使用的是 LimeSurvey RemoteControl API,它有点太敏感了。我可以在网络服务器中转换请求 - 我刚才做了,哪种解决了问题,但不是问题。
  • 是的,我把它作为评论而不是出于这个原因的答案。

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


【解决方案1】:

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

【讨论】:

  • 感谢您的解释。我不想将它作为 Blob 发送,因为我似乎无法以这种方式利用 AngularJS。
  • 感谢您提供有关硬编码的信息。快把我逼疯了:)
猜你喜欢
  • 2016-12-27
  • 2013-05-03
  • 2014-11-02
  • 2016-02-21
  • 2015-07-12
  • 2018-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多