Как предотвратить отправку apache заголовка закрытия соединения & lt; s & gt; для 304 ответов & lt; / s & gt;

У меня есть следующие настройки:

Некоторые файлы генерируются динамически в зависимости от некоторых (только нескольких) параметров сеанса. Поскольку они не отличаются большим разнообразием, я разрешаю кэширование в прокси / браузерах. Файлы получают etag на своем пути, и реакция всего веб-приложения на первый взгляд кажется правильной: файлы обслуживаются в правильной зависимости от ситуаций сеанса, трафик экономится.

И тогда это ошибочное поведение:

Но при ближайшем рассмотрении я обнаружил, что в его ответе в случае 304 для этих динамически генерируемых файлов apache ошибочно отправляет заголовок «Connection: close» вместо обычно отправляемого «Connection: KeepAlive». То, что он должен сделать, это: просто не манипулируйте ничем, касающимся «связи».

Я не могу найти никакой точки, где можно точно определить причину такого поведения: нигде в файлах конфигурации apache ничего не написано, кроме одной строки в одном файле, где указано, что нужно отправить сообщение поддержки активности — что оно и делает — до тех пор, пока это не так. отправить ответ 304 для динамически сгенерированного файла. Нигде в PHP я не инструктирую этого парня посылать что-либо, кроме keepalive (и последнее только для того, чтобы попытаться противостоять соединению: close).

Apache не делает этого, когда обслуживает «нормальные» (не динамические) файлы (с 304 ответами). Так или иначе, я предполагаю, что, возможно, ядро ​​PHP является тем, кто вмешивается здесь без разрешения или без запроса. Но затем, добавленный «Соединение заголовка« Keep-Alive »» в конфигурации Apache, который я тоже добавил, чтобы противостоять закрытию соединения, тоже не работает. Обычно, когда вы помещаете такое правило набора заголовков (не «раннего» типа) в конфигурацию apache, эти правила принимают действие ПОСЛЕ финализации любой подупорядоченной работы над запрошенным документом (таким образом, ПОСЛЕ финализации вывода PHP). Но в моем случае ничего не происходит — хорошо: в случае ответа 304. Во всех остальных случаях все работает нормально и правильно.

Поскольку при запросе страницы некоторые файлы пересекают строку, я был бы признателен за то, чтобы Apache избавился от этих замыканий соединений.

Есть ли кто-нибудь, кто знает, что делать с таким поведением?

-2

Решение

П.С .: Через день (и хороший сон) все проясняется:

Виновником в этом случае был недальновидный (от моего имени) скопированный фрагмент кода, который имел «HTTP / 1. >>> 0<<< 304 «(Нуль!) В нем.

Этот номер версии протокола (правильно) подвергается последующей обработке Apache (после того, как все остальное — включая работу любых модулей Apache — будет завершено), поскольку он решает не отправлять «Connection: Keep-Alive» по сети, так как эта функция не существует в версии HTTP / 1.0.

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]