PHP是如何获取访客HTTP标头的



在Internet上,当使用我们的浏览器加载任何网页时,执行的一系列操作对我们来说是无形的,但是对于建立连接而言是决定性的。
通过按页面上的链接或输入URL,浏览器向存储所请求页面的Web服务器发送一系列请求,这些请求称为Web标头或HTTP标头,并由现有协议建立。
请求的目的是通知申请人的数据服务器,例如IP地址,要在其中显示页面的设备类型,已安装的操作系统,版本等。
由于有时服务器上可以使用不同的版本,因此这将使页面可以在客户端计算机上正确显示。整个过程对用户而言是不可见的,并且很快完成。

可以显示一些标头和服务器返回的响应,这可能非常有用,因为我们将从托管请求页面的服务器中获取信息,但也可以帮助我们将实用程序添加到特定页面,并且用户可以查看您自己的信息,例如当时分配的IP地址。

如何向页面用户显示标题?

要使用户在其浏览器中加载特定页面,请查看其自身的信息,例如IP地址,主机,其Internet提供商,计算机上使用的端口等。从逻辑上讲,有必要使用PHP语言。
PHP是一种脚本编程语言,与其他Javascript不同,它在服务器端运行。 通过插入页面源代码中并显示用户和Web服务器的IP地址及其他信息的代码。

查看标头或HTTP标头的要求

三个条件是必要的, 满足这些要求的过程很容易。

  • 存储页面的服务器提供PHP支持,目前绝大多数都提供PHP支持。 ✓
  • 用户有权访问要显示信息的网页的源代码。 ✓
  • 该页面作为PHP提供,因此文件扩展名为.PHP,而不是HTML或HTM。 ✓

使用的主要标头或HTTP标头

以下是主要Web标头的列表,这些标头可能有助于向我们页面的读者显示信息。
下面我们将看到如何使用它们。

  • 'REMOTE_ADDR' :显示分配给在浏览器中加载页面的用户的IP地址。
  • 'REMOTE_HOST':用户主机的名称。
  • 'REMOTE_PORT':用户计算机用来与Web服务器通信的端口。
  • 'HTTP_REFERER':指向当前页面的上一页的地址。
  • 'REQUEST_URI':用于访问页面的URL,例如:“ /index.html”
  • 'HTTP_USER_AGENT':当前请求的User-Agent标头的内容。它由一个表示Web浏览器用户代理的字符串组成,包含一些数据,例如浏览器型号,版本,操作系统等。

如果使用HTTPS协议请求脚本,则“https”提供一个非空值。

  • 'SERVER_ADDR':当前正在运行脚本的服务器的IP地址。
  • 'SERVER_NAME':当前正在运行脚本的服务器的主机名。
  • 'DOCUMENT_ROOT' : 当前脚本在其中运行的服务器的根文档目录。
  • 'SERVER_SOFTWARE' : 在请求响应头中给出的服务器标识字符串。
  • 'SERVER_PROTOCOL' : 通过其请求页面的信息协议的名称和修订号,例如“ HTTP / 1.0”。
  • 'SERVER_ADMIN' : Web服务器配置文件中
  • 'SERVER_ADMIN' : Apache指令的值。
  • 'REQUEST_METHOD' : 用于访问页面的请求方法,它可以是以下任意一种:GET,HEAD,POST,PUT。
  • 'REQUEST_TIME' : Unix请求开始的日期
  • 'QUERY_STRING' : 页面请求的查询字符串。
  • 'HTTP_ACCEPT' : 接受当前请求的标头内容。
  • 'HTTP_ACCEPT_CHARSET' : 当前请求的 Accept-Charset标头内容:(如果存在)。例如:“ iso-8859-1,*,utf-8”。
  • 'HTTP_ACCEPT_ENCODING' : 当前请求的Accept-Encoding标头的内容(如果存在)。例如:“ gzip”。
  • 'HTTP_ACCEPT_LANGUAGE' : 当前请求的Accept-Language标头的内容(如果存在)。例如:“ en”,“ cn”等。
  • 'HTTP_CONNECTION' : 当前请求的Connection标头的内容(如果存在)。例如:“保持活动”。
  • 'HTTP_HOST' : 当前请求的主机标头的内容。
  • 'SCRIPT_FILENAME' : 当前绝对运行的脚本路径。
  • 'SERVER_PORT' : Web服务器用于通信的服务器计算机端口。
  • 'SERVER_SIGNATURE' : 一个字符串,其中包含服务器版本和虚拟主机名,这些服务器版本和虚拟主机名已添加到服务器生成的页面中。
  • 'SCRIPT_NAME' : 包含当前脚本路径。这对于需要自己注册的页面很有用。FILE常量包含绝对路径和包含的当前文件的名称。
  • 'PHP_AUTH_DIGEST' : 如果该变量在Apache中作为执行摘要HTTP身份验证的模块执行,则此变量具有客户端发送的“ Authorization”标头的值(然后必须将其用于执行正确的验证)
  • 'PHP_AUTH_USER' : 该变量具有用户名的值。
  • 'PHP_AUTH_PW' : 当在Apache或IIS(PHP 5中为ISAPI)执行HTTP身份验证模块时,此变量具有用户提供的密码值。
  • 'AUTH_TYPE' : 当在Apache中执行HTTP身份验证模块时,此变量具有所使用的身份验证类型的值。
  • 'PATH_INFO' : 包含有关客户端提供的路径的任何信息,该信息在当前脚本文件的名称之后,在请求字符串之前。
  • 'ORIG_PATH_INFO' : 由PHP处理之前的“ PATH_INFO” 的原始版本。

如何使用PHP编写IP地址和其他访客标头

要写入标头的结果,我们必须在PHP中使用SERVER变量。
$_SERVER是一个特殊变量,其中包含包含所有Web服务器信息, 包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组 。在PHP中,所有变量都以美元符号 $  开头,要打印(显示变量内容),请使用ECHO命令,如下所示:

获取请求的User-Agent的头信息例子

<?php
echo $_SERVER['HTTP_USER_AGENT'];
?>

同样,使用该方法,您可以编写任何必要的信息,甚至可以合并多个变量。

<?php
echo "您的IP地址是: {$_SERVER['REMOTE_ADDR']}";
echo "您请求的Host头信息: {$_SERVER['HTTP_HOST']}";
echo "您来自页面: {$_SERVER['HTTP_REFERER']}";
echo "您链接的端口: {$_SERVER['REMOTE_PORT']}";
echo "您当前请求的User-Agent的头信息: {$_SERVER['HTTP_USER_AGENT']}";
echo "脚本运行时间:{$_SERVER['REQUEST_TIME']}";
?>

创建表例子

<?php
    echo '<table border="1">';
    foreach($_SERVER as $k => $v) {
        echo '<tr><td>'.$k.'</td><td>'.$v.'</td></tr>';
    }
    echo '</table>';
?>

创建页面以获取服务器信息

<?php
echo <<<END
<!DOCTYPE html-->
<meta charset="UTF-8">
<title>\$_SERVER</title>

<style>
    table {<br />
        border-collapse: collapse;<br />
    }<br />
    td {<br />
        border: 1px solid #999;<br />
        padding: 3px;<br />
    }<br />
</style>

END
;
foreach ($_SERVER as $k =&gt; $v) {
$key = htmlentities($k);
$value = htmlentities($v);
echo "\n\t\n\t\t<table><tbody><tr><td>$key\n\t\t</td><td>$value\n";
}
echo "</td></tr></tbody></table>";
?>

删除代理后面的IP地址

<?php
echo "您的IP地址是: {$_SERVER['HTTP_X_FORWARDED_FOR']}";
?>

页面重定向

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'Chrome') !== FALSE) {
header("Location: https://www.google.com/");
//判断游览器,并跳转到指定页面
?>

$_SERVER涉及的内容太多了就不一一列出来 ,有兴趣的朋友可以查阅官方文档。