【问题标题】:Display HTTP Response on Webpage using PHP使用 PHP 在网页上显示 HTTP 响应
【发布时间】:2023-12-08 15:29:01
【问题描述】:

我希望建立一个网站,以显示完整的 HTTP 请求标头HTTP 响应标头 以加载页面本身。例如。如果有人浏览到 http://example.com/index.php ,我希望显示以下内容:

HTTP 请求
GET /index.php HTTP/1.1
主机:example.com
用户代理:Mozilla/5.0(Windows;U;Windows NT 6.1;en-US;rv:1.9.2.16)Gecko/20110319 Firefox/3.6.16
接受:text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
接受语言:en-us,en;q=0.5
接受编码:gzip,deflate
接受字符集:ISO-8859-1,utf-8;q=0.7,*;q=0.7
保活:115
连接:保持活动

HTTP 响应
HTTP/1.1 200 正常
日期:格林威治标准时间 2011 年 12 月 21 日星期一 10:20:46
服务器:Apache/2.2.15 (Red Hat)
X-Powered-By:PHP/5.3.3
内容长度:1169
连接:关闭
内容类型:文本/html;字符集=UTF-8

使用以下 PHP 代码,我们能够相当简单地显示请求标头:

print $_SERVER['REQUEST_METHOD']." ".$_SERVER['REQUEST_URI']." ".$_SERVER['SERVER_PROTOCOL']."<br>";
foreach (apache_request_headers() as $name => $value)
        echo "$name: $value<br>";

但是在使用 HTTP 响应标头时遇到了一些困难。有人对我们如何做到这一点有任何想法吗?如果你有一个可以在 Perle 或 CGI 或其他中工作的方法,它不一定是 PHP。

为了清楚起见,我的意思不是设置 HTTP 响应为任何特定的,只是 显示 Web 服务器提供的响应以加载页面。

【问题讨论】:

  • 啊,我在原始评论中有页面的最终目标,但是当我第一次尝试发布时它出错了,忘记重新包含它。该页面的最终目标是位于负载均衡器后面的网络服务器上,以便我们可以查看/测试/训练负载均衡器如何影响 HTTP 流。
  • 你能用Javascript来显示这些信息吗,对你来说会容易得多。
  • 您显然无法从 PHP 访问响应标头,因为它们将在您的脚本完成后添加。甚至代理服务器也可以在您的服务器不知情的情况下将自己的标题行添加到响应中。这只能在客户端完成。

标签: php html http-headers httpresponse


【解决方案1】:

你想使用 headers_list()

http://www.php.net/manual/en/function.headers-list.php

headers_list() 将返回要发送到浏览器/客户端的标头列表。要确定这些标头是否已发送,请使用 headers_sent()。

【讨论】:

  • @TomalakGeret'kal Fair。我想知道将其全部包装在输出缓冲区中是否足以在发送前捕获完整的标头。看起来很复杂,但我想它可以工作。
  • Content-Length 会是什么?
  • ob_get_length?再一次,这似乎非常令人费解。
  • 不,这很棘手。标头列表是输出的 part...然后您尝试在标头中包含输出的长度....
【解决方案2】:

这就是问题所在,响应标头是在 PHP(或与此相关的任何服务器端语言)完成其工作之后生成的。

用英语来说,就像邮递员给你一封信,你要求他解释给你信的过程是如何进行的。他可能只会看着你傻。

您将需要一种客户端语言(即 JavaScript)来执行此任务。

【讨论】:

    【解决方案3】:

    使用 PHP 获取发送到 Web 服务器的标头。

    http://www.php.net/manual/en/function.apache-request-headers.php

    使用 JavaScript 获取 Web 服务器发送的标头。我建议使用 jQuery。

    http://api.jquery.com/jQuery.ajax/#jqXHR

    通过这种方式,您可以确保获得 Web 服务器或浏览器接收到的所有标头。

    【讨论】:

      【解决方案4】:

      【讨论】:

      • 不过,这不会为您提供正在查看的页面的标题。 PHP 不知道这些是什么,因为其中一些来自 Apache。
      最近更新 更多