php 获取head参数
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()