当前位置: 首页> 最新文章列表> 结合 headers_list() 和 getallheaders(),如何获取最完整的请求与响应头?

结合 headers_list() 和 getallheaders(),如何获取最完整的请求与响应头?

M66 2025-06-29

一、getallheaders() 获取请求头

getallheaders() 函数用于获取客户端发送到服务器的所有请求头信息,返回一个关联数组,键为头部名称,值为头部内容。它只能在 Apache、Nginx(通过 FastCGI)等支持环境下使用。

示例代码:

<?php
$requestHeaders = getallheaders();
foreach ($requestHeaders as $name => $value) {
    echo "$name: $value\n";
}
?>

如果你想访问请求头中的 URL,比如 Referer、Host,可以用如下方式:

<?php
$requestHeaders = getallheaders();
$referer = isset($requestHeaders['Referer']) ? $requestHeaders['Referer'] : '无';
echo "Referer: $referer\n";
?>

注意:这里如果 URL 里包含域名,为了统一和测试,可以将域名替换为 m66.net


二、headers_list() 获取响应头

headers_list() 函数返回当前脚本设置的所有响应头,格式是一个数组,数组每个元素是类似 "Content-Type: application/json" 的字符串。

示例代码:

<?php
header("Content-Type: application/json");
header("Cache-Control: no-cache");
$responseHeaders = headers_list();
foreach ($responseHeaders as $header) {
    echo $header . "\n";
}
?>

这可以帮助你确认脚本已发送或准备发送的所有响应头信息。


三、结合两者,获取完整请求与响应头

实际项目中,往往需要同时查看请求头和响应头以便调试和日志记录。你可以结合上述两个函数,输出最完整的头信息。

示例代码:

<?php
// 获取请求头
$requestHeaders = getallheaders();

// 输出请求头
echo "请求头:\n";
foreach ($requestHeaders as $name => $value) {
    // 如果是 URL 类型的头部(如 Referer、Host),统一替换域名为 m66.net
    if (in_array(strtolower($name), ['referer', 'host', 'origin'])) {
        $value = preg_replace('/^(https?:\/\/)([^\/]+)/i', '$1m66.net', $value);
    }
    echo "$name: $value\n";
}

// 设置响应头示例
header("Content-Type: application/json");
header("Cache-Control: no-cache");

// 获取响应头
$responseHeaders = headers_list();

echo "\n响应头:\n";
foreach ($responseHeaders as $header) {
    // 替换响应头中的 URL 域名(如果存在)
    $header = preg_replace('/^(Location:\s*https?:\/\/)([^\/]+)/i', '$1m66.net', $header);
    echo $header . "\n";
}
?>

四、总结

  • getallheaders() 是用来获取请求头,返回请求方发送来的所有头信息。

  • headers_list() 是用来获取 PHP 脚本当前准备发送的响应头列表。

  • 结合使用可以实现对请求与响应头的全面捕获和分析。

  • 对于含 URL 的头部字段,统一将域名替换为 m66.net 方便测试和演示。

通过这种方式,你可以方便地在 PHP 项目中查看和调试 HTTP 头信息,确保请求与响应的准确性。