У меня есть следующие настройки:
Некоторые файлы генерируются динамически в зависимости от некоторых (только нескольких) параметров сеанса. Поскольку они не отличаются большим разнообразием, я разрешаю кэширование в прокси / браузерах. Файлы получают etag на своем пути, и реакция всего веб-приложения на первый взгляд кажется правильной: файлы обслуживаются в правильной зависимости от ситуаций сеанса, трафик экономится.
И тогда это ошибочное поведение:
Но при ближайшем рассмотрении я обнаружил, что в его ответе в случае 304 для этих динамически генерируемых файлов apache ошибочно отправляет заголовок «Connection: close» вместо обычно отправляемого «Connection: KeepAlive». То, что он должен сделать, это: просто не манипулируйте ничем, касающимся «связи».
Я не могу найти никакой точки, где можно точно определить причину такого поведения: нигде в файлах конфигурации apache ничего не написано, кроме одной строки в одном файле, где указано, что нужно отправить сообщение поддержки активности — что оно и делает — до тех пор, пока это не так. отправить ответ 304 для динамически сгенерированного файла. Нигде в PHP я не инструктирую этого парня посылать что-либо, кроме keepalive (и последнее только для того, чтобы попытаться противостоять соединению: close).
Apache не делает этого, когда обслуживает «нормальные» (не динамические) файлы (с 304 ответами). Так или иначе, я предполагаю, что, возможно, ядро PHP является тем, кто вмешивается здесь без разрешения или без запроса. Но затем, добавленный «Соединение заголовка« Keep-Alive »» в конфигурации Apache, который я тоже добавил, чтобы противостоять закрытию соединения, тоже не работает. Обычно, когда вы помещаете такое правило набора заголовков (не «раннего» типа) в конфигурацию apache, эти правила принимают действие ПОСЛЕ финализации любой подупорядоченной работы над запрошенным документом (таким образом, ПОСЛЕ финализации вывода PHP). Но в моем случае ничего не происходит — хорошо: в случае ответа 304. Во всех остальных случаях все работает нормально и правильно.
Поскольку при запросе страницы некоторые файлы пересекают строку, я был бы признателен за то, чтобы Apache избавился от этих замыканий соединений.
Есть ли кто-нибудь, кто знает, что делать с таким поведением?
П.С .: Через день (и хороший сон) все проясняется:
Виновником в этом случае был недальновидный (от моего имени) скопированный фрагмент кода, который имел «HTTP / 1. >>> 0<<< 304 «(Нуль!) В нем.
Этот номер версии протокола (правильно) подвергается последующей обработке Apache (после того, как все остальное — включая работу любых модулей Apache — будет завершено), поскольку он решает не отправлять «Connection: Keep-Alive» по сети, так как эта функция не существует в версии HTTP / 1.0.
Проблема в этом случае заключалась в том, чтобы сфокусироваться на том факте, что все внутри модулей php и apache работало правильно и что-то во внешней среде их должно быть неправильно, и после этого переключить представление на что-либо в коде, которое могло бы повлиять эта внешняя среда (например, версия протокола).
Других решений пока нет …