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