Я пытаюсь установить постоянное соединение HTTP из приложения Silverlight со страницей PHP (т.е. без создания нового соединения TCP для каждого запроса HTTP), размещенного на сервере Apache.
Для этого мне нужно, чтобы веб-сервер отправлял свои HTTP-ответы с заголовком «Connection», установленным в «Keep-alive». На стороне клиента, похоже, нет никаких проблем, так как сетевой API, предоставляемый Silverlight, по сути является оберткой сетевых возможностей браузера, из того, что я прочитал: так, если браузер поддерживает HTTP 1.1 и Connection: Keep-Alive по умолчанию для его запросов, это нормально. Content-Length также хорошо определен, так что сервер знает, когда
он должен отправить ответ. Однако ответ сервера на запрос PHP систематически устанавливает «Соединение:» в «закрытие», тем самым разрывая соединение и предотвращая постоянное соединение.
Я пытался обойти эту проблему: разные методы (GET и POST), явно дающие «Connection: keep-alive» на ответ с помощью следующего PHP-кода в начале моего скрипта:
header("Connection: Keep-alive");
Последний добавляет ожидаемый заголовок к ответу, и это хорошо, но дополнительное «Соединение: закрыть» все еще добавляется позже в заголовки ответа.
Это особенность PHP или Apache, которая обеспечивает "закрытие" (я полагаю, в целях безопасности или производительности) или я просто что-то здесь упускаю?
Заранее спасибо.
P.S. Обнаружив пакеты, я заметил, что не многие веб-сайты используют «Keep-alive», и соединение TCP восстанавливается. Разве Keepalive не является стандартным и предпочтительным поведением в HTTP 1.1?