在客户端请求的时候增加了自定义的http头,请求如下所示:
var_dump(
getallheaders
);
![]()
一开始通过getallheaders参数获取,但是发现在nginx部署的服务器上获取不到,非常奇怪,查看php手册发现getallheaders这个函数只支持apache服务器。于是找到兼容的方法:
if
(!function_exists(
'getallheaders'
)) {
function
getallheaders
() {
$headers
=
array
();
foreach
(
$_SERVER
as
$name
=>
$value
) {
if
(
substr
(
$name
, 0, 5) ==
'HTTP_'
) {
$headers
[
str_replace
(
' '
,
'-'
, ucwords(
strtolower
(
str_replace
(
'_'
,
' '
,
substr
(
$name
, 5)))))] =
$value
;
}
}
return
$headers
;
}
}
var_dump(
getallheaders
());
实际上这个方法就是找到$_SERVER变量中以HTTP_开头的属性,对属性做一个字符串替换这样。$_SERVER变量中的HTTP_USER_ID实际就是上面自定义的User-Id:
另外关于自定义Http头,
需要注意头的命名规范,不能用下划线命名
,否则在nginx服务器下读取不到,在查找命名规范的时候,有提到自定义属性用X-开头这个问题。后来查阅了一些资料,发现后来的http协议不建议这样去做。