Откуда эти дополнительные HTTP-заголовки? - PullRequest
13 голосов
/ 24 июня 2011

Когда я просто выводю что-то из php-файла, я не отправляю какие-либо преднамеренно заголовки, однако, в любом случае, когда я смотрю на ответ firebug, присутствуют некоторые заголовки по умолчанию:

заголовки ответа:

HTTP / 1.1 200 OK
Сервер: nginx
Дата: четверг, 23 июня 2011 г. 19:33:51 GMT
Тип контента: текст / html
Передача-кодировка: чанки
Подключение: keep-alive
Варьируется: Accept-Encoding
X-Powered-By: PHP / 5.3.6-6 ~ dotdeb.1
Истекает: четверг, 19 ноября 1981 года, 08:52:00 по Гринвичу
Cache-Control: нет хранилища, нет кэша, необходимо повторно проверить, после проверки = 0, предварительная проверка = 0
Прагма: без кеша
Контент-кодировка: gzip

Мне любопытно - эти заголовки ответов по умолчанию устанавливаются сервером (nginx) или PHP?

Ответы [ 7 ]

8 голосов
/ 24 июня 2011

Я полагаю, что это комбинация обоих ... Вы можете сказать, что "X-Powered-By: PHP / 5.3.6-6 ~ dotdeb.1" происходит из PHP, а "Server: nginx" - из NGINX.

Вы можете изменить заголовки в PHP следующим образом:

<?php
    header("HTTP/1.0 404 Not Found");
?>

Заголовок gzip наиболее определенно исходит от NGINX, поскольку он сжимает вывод (html) в браузер.PHP может «добавить» заголовки, вызывая функцию, подобную приведенной выше.Затем сервер объединяет его с заголовками PHP и обрабатывает запрос.

Это зависит от вашего сервера, имеют ли заголовки PHP приоритет над заголовками сервера.

Надеюсь, это поможет.

3 голосов
/ 24 июня 2011

Большинство задается nginx, например, Сервер, Дата, Кодировка содержимого и Соединение.Однако некоторые другие заголовки устанавливаются PHP, и вы можете добавить другие в PHP, например: header("Name: Value");

2 голосов
/ 24 июня 2011

PHP автоматически устанавливает некоторые из них, например Content-Type: text/html для страницы приветствия. nginx устанавливает те, которые имеют отношение к сокету, например Connection: keep-alive.

Настройки для подключения вы найдете в конфигурации nginx. По содержанию это PHP. Вы можете переопределить довольно много из них с помощью функции header() в PHP, а также добавлять свои собственные заголовки. http://php.net/manual/en/function.header.php

Например, вы можете установить Content-Type на application/json, если вы планируете, чтобы PHP отправлял строку JSON.

2 голосов
/ 24 июня 2011

Большинство заголовков отправляются nginx. Чтобы вывести список заголовков (которые будут отправлены PHP), используйте функцию headers_list:

<?php
echo htmlentities(print_R(headers_list(), true));
?>
2 голосов
/ 24 июня 2011

Заголовок X-Powered-By управляется значением директивы expose_php в php.ini:

Решает, может ли PHP раскрыть тот факт, что он установлен на сервере (например, путем добавления своей подписи в заголовок веб-сервера). Это никоим образом не угрожает безопасности, но позволяет определить, используете ли вы PHP на вашем сервере или нет.

1 голос
/ 22 июля 2011

Чего не хватает в ответах, так это роли PHP:

Некоторые заголовки действительно устанавливаются самим PHP, но причина не так легко найти. Это поведение разделителя кэша сеанса по умолчанию, объясненное здесь: http://www.php.net/manual/en/function.session-cache-limiter.php

Чего не хватает в документации, так это как полностью отключить их - просто передайте ему неопределенное значение:

session_cache_limiter(false);

Вы должны сделать это, прежде чем начать сеанс. В случае, если вы используете Zend Framework, вы должны установить это до того, как ваши приложения загрузятся () - иначе это не будет работать.

1 голос
/ 24 июня 2011

Вы также можете перезаписать любой из заголовков сервера по умолчанию, используя функцию header(). Например, если вы включите в свой PHP header('Server: ') это сбросит заголовок Server: на пустой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...