Отображение HTTP-ответа на веб-странице с использованием PHP

Я хочу создать веб-сайт, который будет отображать полные заголовки 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
Accept-Language: en-us, en; q = 0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1, utf-8; q = 0.7, *; q = 0,7
Keep-Alive: 115
Соединение: keep-alive

Ответ HTTP
HTTP / 1.1 200 OK
Дата: 21 декабря 2011 г., понедельник, 10:20:46 GMT
Сервер: Apache / 2.2.15 (Red Hat)
X-Powered-By: PHP / 5.3.3
Длина содержимого: 1169
Подключение: закрыть
Тип содержимого: text / html; charset = 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-ответа. У кого-нибудь есть идеи, как мы можем это сделать? Это не обязательно должен быть PHP, если у вас есть метод, работающий на Perle, CGI или чем-то еще.

Для ясности, я не хочу устанавливать HTTP-ответ на что-либо конкретное, а только отображать ответ, обслуживаемый веб-сервером для загрузки страницы.


person Eddie    schedule 21.12.2011    source источник
comment
Ах, у меня была конечная цель страницы в исходном комментарии, но когда я впервые попытался опубликовать сообщение, он дал ошибку, забыл повторно включить ее. Конечная цель страницы - расположиться на веб-серверах за балансировщиками нагрузки, чтобы мы могли видеть / тестировать / обучать, как балансировщик нагрузки влияет на потоки HTTP.   -  person Eddie    schedule 21.12.2011
comment
Можете ли вы использовать Javascript для отображения этой информации, вам будет намного проще.   -  person Gabriel Gartz    schedule 21.12.2011
comment
Очевидно, вы не можете получить доступ к заголовкам ответов из PHP, потому что они будут добавлены после завершения вашего скрипта. Даже прокси-серверы могут добавлять свои собственные строки заголовка к ответу без ведома вашего сервера. Это можно сделать только на стороне клиента.   -  person vbence    schedule 21.12.2011


Ответы (4)


Проблема в том, что заголовок ответа создается после того, как PHP (или любой серверный язык в этом отношении) уже завершил свою работу.

Выражаясь по-английски, это как если бы почтальон вручает вам письмо, а вы просите его объяснить, как прошел процесс вручения вам письма. Он, вероятно, просто посмотрит на тебя тупой.

Для выполнения этой задачи вам понадобится клиентский язык (например, JavaScript).

person PseudoNinja    schedule 21.12.2011

Вы хотите использовать headers_list ()

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

headers_list () вернет список заголовков для отправки в браузер / клиент. Чтобы определить, были ли отправлены эти заголовки, используйте headers_sent ().

person MetalFrog    schedule 21.12.2011
comment
@ TomalakGeret'kal Ярмарка. Интересно, хватит ли обертывания всего этого в выходном буфере для захвата полных заголовков перед их отправкой. Выглядит довольно запутанно, но я думаю, это может сработать. - person MetalFrog; 22.12.2011
comment
Что бы Content-Length было? - person Lightness Races in Orbit; 22.12.2011
comment
ob_get_length? Опять же, это кажется чрезвычайно запутанным. - person MetalFrog; 22.12.2011
comment
Нет, это невозможно. Список заголовков - это часть вывода ... тогда вы пытаетесь включить длину вывода в заголовки .... - person Lightness Races in Orbit; 22.12.2011

Используйте PHP для отправки заголовков на веб-сервер.

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

Используйте JavaScript для получения заголовков, отправленных веб-сервером. Я бы посоветовал использовать для этого jQuery.

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

Таким образом, вы уверены, что получите все заголовки, полученные либо веб-сервером, либо браузером.

person B. Martin    schedule 12.02.2014

Ознакомьтесь с get_headers в Руководстве по PHP

person DaOgre    schedule 21.12.2011
comment
Однако это не даст вам заголовков просматриваемой страницы. PHP не знает, что это такое, поскольку некоторые из них происходят от Apache. - person ceejayoz; 21.12.2011