为什么AngularJS请求拦截器的config参数中没有所有请求头?

时间:2014-09-23 05:40:46

标签: javascript angularjs

我有一个AngularJS $ http拦截器来拦截请求和响应。 我需要访问拦截器请求方法中的一些请求标头。

但是当我控制台记录了作为请求方法的参数接收的配置对象时,我只能看到config.headers下的单个头;

Accept: "application/json, text/plain, */*"

和开发者'工具显示所有请求标题,如

Accept:application/json, text/plain, */*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:mr,en-US;q=0.8,en;q=0.6
Connection:keep-alive
Host:localhost:8080
Origin:http://127.0.0.1:61917
Referer:http://127.0.0.1:61917/index.html

我知道$httpProvider.defaults.headers.common设置了所有请求通用的标头,添加的默认标头是

Accept: application/json, text/plain, * / *

但为什么我无法访问请求的其他请求标头?

如何在AngularJs中的请求拦截器方法中获取所有这些请求头?

2 个答案:

答案 0 :(得分:3)

我可以回答这个问题!即使您的浏览器将请求中的window.navigator.language标头发送到服务器,只有服务器可以读取此标头的值(疯狂,对吗?)。访问此标头值的唯一方法是读取服务器上的请求标头的值,然后将其发送回客户端。

您可以在响应标头或响应正文中发送window.navigator.language的值。

此外,在服务器的某个位置会有一行说明如下:

{{1}}

将{{1}}添加到公开标头列表中可能会有所帮助,因此它的内容如下:

{{1}}

我使用的是{{1}}标题,而不是来自{{1}}来确定用户的语言,因为似乎{{1}}通常会提供不正确的值。

希望有所帮助!

答案 1 :(得分:0)

将其他标头值视为构造请求时添加的浏览器设置。您可以获得其中的一些内容,例如document.referrerwindow.navigator.userAgentwindow.navigator.language