我有一个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中的请求拦截器方法中获取所有这些请求头?
答案 0 :(得分:3)
我可以回答这个问题!即使您的浏览器将请求中的window.navigator.language
标头发送到服务器,只有服务器可以读取此标头的值(疯狂,对吗?)。访问此标头值的唯一方法是读取服务器上的请求标头的值,然后将其发送回客户端。
您可以在响应标头或响应正文中发送window.navigator.language
的值。
此外,在服务器的某个位置会有一行说明如下:
{{1}}
将{{1}}添加到公开标头列表中可能会有所帮助,因此它的内容如下:
{{1}}
我使用的是{{1}}标题,而不是来自{{1}}来确定用户的语言,因为似乎{{1}}通常会提供不正确的值。
希望有所帮助!
答案 1 :(得分:0)
将其他标头值视为构造请求时添加的浏览器设置。您可以获得其中的一些内容,例如document.referrer
,window.navigator.userAgent
或window.navigator.language
。