當前位置: 首頁> 最新文章列表> 結合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 頭信息,確保請求與響應的準確性。