php 获取head参数
在PHP中,获取HTTP头部(head)参数可以通过不同的方式实现,下面为你详细介绍几种常见的方法。
1. 使用$_SERVER超全局变量
 
$_SERVER 是PHP中的一个超全局变量,它包含了诸如头信息、路径、脚本位置等信息。许多HTTP头部信息可以通过特定的 $_SERVER 键来获取。通常,HTTP头部信息会被转换为 HTTP_ 前缀加上头部名称,并且将头部名称中的 - 替换为 _,同时全部转换为大写。
以下是一个示例代码:
<?php
// 获取特定的HTTP头部信息
if (isset($_SERVER['HTTP_USER_AGENT'])) {$userAgent = $_SERVER['HTTP_USER_AGENT'];echo "User Agent: ". $userAgent. "<br>";
}if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {$acceptLanguage = $_SERVER['HTTP_ACCEPT_LANGUAGE'];echo "Accept Language: ". $acceptLanguage. "<br>";
}// 遍历所有HTTP头部信息
foreach ($_SERVER as $key => $value) {if (strpos($key, 'HTTP_') === 0) {$headerName = str_replace('HTTP_', '', $key);$headerName = str_replace('_', '-', $headerName);$headerName = strtolower($headerName);echo $headerName. ": ". $value. "<br>";}
}
?>
 
代码解释:
- 首先,通过检查 
$_SERVER数组中是否存在特定的键(如HTTP_USER_AGENT和HTTP_ACCEPT_LANGUAGE)来获取对应的头部信息。 - 然后,使用 
foreach循环遍历$_SERVER数组,筛选出以HTTP_开头的键,将其转换为标准的头部名称格式并输出。 
2. 使用 getallheaders() 函数
 
getallheaders() 函数可以直接返回当前请求的所有HTTP头部信息,返回值是一个关联数组,数组的键是头部名称,值是对应的头部值。
以下是示例代码:
<?php
$headers = getallheaders();
if ($headers) {foreach ($headers as $name => $value) {echo $name. ": ". $value. "<br>";}
}
?>
 
代码解释:
- 调用 
getallheaders()函数获取所有HTTP头部信息,并将结果存储在$headers数组中。 - 使用 
foreach循环遍历$headers数组,输出每个头部的名称和值。 
注意事项:
getallheaders()函数在某些服务器环境(如FastCGI)中可能不可用。在这种情况下,你可以使用$_SERVER数组来获取头部信息。- 对于自定义的HTTP头部,同样可以使用上述方法获取。例如,自定义头部 
X-Custom-Header可以通过$_SERVER['HTTP_X_CUSTOM_HEADER']或在getallheaders()返回的数组中直接访问。 
补充
为什么无法获取 Authorization 头?
原因:Apache 默认会过滤 Authorization 头
 修复:在 .htaccess 中添加:
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
 
头名称转换规则:
 $SERVER 中自定义头会被转换为 HTTP 前缀 + 大写(如 X-Token → HTTP_X_TOKEN)
 自动转为大写格式(如user-agent会变成HTTP_USER_AGENT)
 连字符-会被转换为下划线_
 安全性:
 始终验证头部来源(如 X-Forwarded-For 可能被伪造)
 性能优化:
 避免在循环中频繁调用 apache_request_headers()