如何让PHP显示从浏览器接收到的头部信息?

42

它们都存储在$_SERVER中吗?包括自定义的变量吗?

7个回答

44

试试这个

print_r($_SERVER)

它将列出数组中的所有内容


1
如果您需要更具体的内容,请使用:<?php print_r($_SERVER[URL]) ?> - LeRoy
不打印 SSL_* 标头,而 getallheaders() 则会。 - Benoit Duffez

43

您可以使用getallheaders()函数获取所有发送的HTTP头的数组。

$headers =  getallheaders();
foreach($headers as $key=>$val){
  echo $key . ': ' . $val . '<br>';
}

24
每个HTTP请求头字段都存储在$_SERVER中(除了Cookie),并且键名以HTTP_开头。如果您使用的是Apache,您也可以尝试使用apache_request_headers函数。

那么Cookie信息呢?我们可以使用$_COOKIE[]来获取它们吗? - shasi kanth
1
@dskanth 是的,$_COOKIE 将包含客户端发送的已解析的 cookie。但是不会有 $_SERVER['HTTP_COOKIE'] - Gumbo
@Gumbo,这与getallheaders有何不同?后者是否会剥离某些标头? - Pacerier
@Pacerier getallheaders服务器特定扩展 的一部分,因此只有在使用 Apache 模块时才可用。另一方面,$_SERVER 始终可用(作为 Web 服务器工作)。 - Niki Romagnoli

9
您可以直接使用 apache_request_headers() 函数或其别名 getallheaders()
用法: echo json_encode(getallheaders()); 如果以上函数不存在(旧版PHP或nginx),您可以使用以下函数作为后备方法:
<?php 
if (!function_exists('getallheaders')){ 
    function getallheaders() { 
       $headers = ''; 
       foreach ($_SERVER as $name => $value) { 
            if (substr($name, 0, 5) == 'HTTP_') { 
                $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; 
            } 
       } 
       return $headers; 
    } 
}
?>

6

查看 $_SERVER 变量以查看其包含的内容。链接到的手册页面上有很多有用的信息,但也可以使用 var_dump 来查看其中的实际内容。许多条目将或不会被填充,这取决于客户端决定做什么以及 PHP 的奇怪癖好。查看我本地服务器上的变量时,还有一个 $_SERVER["ALL_HTTP"] 条目,它只是将所有条目列为字符串,但显然这不是标准的,因为它没有在手册页面上列出。


0

你可以使用apache_request_header()函数,或许能帮到你。

$headers = apache_request_headers();        
foreach ($headers as $header => $value) {
 echo "<pre>";
 echo "$header : $value";
 echo "</pre>";
}

0

发生的情况是http头的名称被重写:

  1. 前缀为HTTP_
  2. 将“-”替换为“_”
  3. 大写

这至少是我观察到的自定义标头和apache 2.4。这不是您应该检查的规范或全面列表,但它可能会引导您朝正确的方向,因为对我来说以上所有内容都没有帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接