Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как заставить TIdHttpServer в Delphi 2010 использовать HTTP/1.0 для избежания постоянных соединений

Delphi , Интернет и Сети , Сокеты

Вопрос, поднятый в данном запросе, заключается в необходимости настройки сервера TIdHttpServer в среде Delphi 2010 для отправки HTTP/1.0 ответа вместо стандартного HTTP/1.1. Это необходимо для отключения поддержки постоянных соединений (keep-alive) и принудительного разрыва соединения клиентом с сервером, чтобы избежать состояния TIME_WAIT на стороне сервера.

Описание проблемы

Пользователь использует последнюю версию исходного кода Indy из SVN для Delphi 2010 и столкнулся с проблемой, что сервер TIdHttpServer по умолчанию отправляет HTTP/1.1 ответы, даже если клиент явно запросил HTTP/1.0. Это приводит к использованию постоянных соединений, что в свою очередь может вызвать состояние TIME_WAIT на сервере.

Пример запроса клиента и ответа сервера

Клиент (в данном случае, Internet Explorer) делает запрос:

GET / HTTP/1.0
Accept: */*
Accept-Language: pt-BR
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)
Host: localhost:114
Connection: Keep-Alive

Сервер Indy отвечает:

HTTP/1.1 200 OK
Connection: close
Content-Type: text/html; charset=ISO-8859-1
Content-Length: 2717

Как видно из ответа сервера, клиент явно указал использовать HTTP/1.0, но сервер все равно отправил ответ в формате HTTP/1.1.

Решение проблемы

После некоторых исследований, пользователь выяснил, что лучшее решение заключается в настройке событий OnCommandGet следующим образом:

AResponseInfo.CloseConnection := False;
AResponseInfo.Connection := 'close';

Установка свойства AResponseInfo.CloseConnection в False предотвращает отключение сервера от клиента, а свойство Connection со значением 'close' заставляет клиента отключиться от сервера, что позволяет избежать состояния TIME_WAIT на стороне сервера.

Подтвержденный ответ

В файле IdCustomHTTPServer.pas строка версии 'HTTP/1.1' жестко закодирована в методе TIdHTTPResponseInfo.WriteHeader. Так как у этого класса нет фабрики для переопределения поведения, которое можно было бы изменить с помощью потомка, его поведение необходимо изменить напрямую в исходном коде. Это означает, что можно изменить жестко закодированную строку на 'HTTP/1.0' или изменить его поведение таким образом, чтобы оно отвечало на основе установки свойства.

Также установка свойства IdHttpServer.KeepLive := False; остановит поддержание постоянных сессий, но это заставит сервер отключить клиента в конце запроса.

Важные замечания

Просто изменение строки не решит проблему полностью. Необходимо убедиться, что класс ведет себя как HTTP/1.0 сервер, согласно спецификации.

Заключение

Для принудительного использования HTTP/1.0 и избежания постоянных соединений, необходимо настроить сервер TIdHttpServer, изменив его поведение в соответствии с нуждами HTTP/1.0, а именно отключив поддержку keep-alive и установив необходимые параметры в обработчике событий. Это позволит серверу корректно обрабатывать запросы клиентов, требующих HTTP/1.0, и избегать состояния TIME_WAIT на стороне сервера.

Создано по материалам из источника по ссылке.

Пользователь столкнулся с необходимостью настроить сервер TIdHttpServer в Delphi 2010 для использования HTTP/1.0, чтобы избежать постоянных соединений и предотвратить состояние TIME_WAIT на сервере.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Сокеты ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 07:48:09/0.00528883934021/1