使用 AngularJS 在 Firefox 中更改请求标头时遇到问题
Posted
技术标签:
【中文标题】使用 AngularJS 在 Firefox 中更改请求标头时遇到问题【英文标题】:trouble changing request headers in Firefox with AngularJS 【发布时间】: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,它有点太敏感了。我可以在网络服务器中转换请求 - 我刚才做了,哪种解决了问题,但不是问题。 是的,我把它作为评论而不是出于这个原因的答案。 【参考方案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。 感谢您提供有关硬编码的信息。快把我逼疯了:)以上是关于使用 AngularJS 在 Firefox 中更改请求标头时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章
CORS 适用于 chrome 但不适用于 firefox、angularjs
AngularJS 的 CORS 错误仅在 FireFox 中发布
AngularJS $http.get() 在 Chrome 中最多需要 10-20 秒,在 Firefox 中运行良好