Apache игнорирует PHP заголовки при отправке 304 - PullRequest
5 голосов
/ 27 июня 2011

Когда я устанавливаю пользовательский заголовок в Apache + mod_php5, это прекрасно работает:

header('Foo: Bar');

Но когда я пытаюсь это сделать , в то время как также отправляет ответ 304 Not Modified, кажется, что заголовок удаляется apache (вместе с X-Powered-By и другими стандартными заголовками).

header('HTTP/1.1 304 No Content');
header('Foo: Bar');

Кто-нибудь знает, как решить эту проблему?

Ответы [ 3 ]

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

Разве это не отвечает на вопрос?

Если условный GET использовал сильный валидатор кэша (см. Раздел 13.3.3), ответ НЕ ДОЛЖЕН включать другие заголовки объекта.В противном случае (т. Е. Условный GET использовал слабый валидатор), ответ НЕ ДОЛЖЕН включать другие заголовки объекта;это предотвращает несоответствия между кэшированными сущностями и обновленными заголовками.

от http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.5

2 голосов
/ 28 июля 2016

Начиная с Apache 2.4.23 (насколько я знаю, последний выпуск на сегодняшний день), вы не сможете обойти эту проблему, отправив ответ 304 «Not Modified», потому что, действительно, , Apache явно удаляет все заголовки без белого списка:

http://svn.apache.org/viewvc/httpd/httpd/tags/2.4.23/modules/http/http_filters.c?view=markup#l1331

Итак, нравится нам это или нет (потому что я нахожусь в том же положении, когда Apache удаляет мои заголовки CORS из ответа, когда я отправляю 304), похоже, что Apache следует рекомендации RFC, и это действительно, рассматривая все, что выходит за пределы этого списка, как заголовки сущностей.

Одним из решений является исправление исходного кода Apache, чтобы расширить этот список и перейти к развертыванию собственного пакета на своих серверах, но это определенно не без длинного списка собственных последствий. С другой стороны, я слышал, что nginx не страдает от этой проблемы.

Содержимое, которое я доставляю, будет потребляться, среди прочего, средами выполнения WebGL в стандартных браузерах, поэтому, если они будут жаловаться на отсутствие CORS в моих 304 ответах, мне придется все перевести на 200 ОК. и отказаться от экономии полосы пропускания.

0 голосов
/ 27 июня 2011

Попробуйте:

header('Foo: bar', true, 304);
...