Принудительно Http 1.0 idHttpServer и TIME_WAIT - PullRequest
1 голос
/ 22 февраля 2011

Delphi 2010, исходный код Last Indy от Svn.

Кто-нибудь знает, как заставить TIDHttpServer отправлять ответ http 1.0 вместо http 1.1?Я хочу избавиться от постоянных соединений (keep-alive), а также хочу, чтобы клиент отключался от моего сервера, а не отключал сервер от клиента (чтобы избежать TIME_WAIT на моем сервере).

Некоторые данные:

Запрос, сделанный клиентом (в данном случае Internet Explorer):

GET / HTTP / 1.0
Принимать: /
Accept-Language: pt-BR
User-Agent: Mozilla / 4.0 (совместимый; 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)
Хост: localhost: 114
Соединение: Keep-Alive

Ответ от моего Indy-сервера:

HTTP / 1.1 200 OK
Соединение: закрыто
Content-Type: text / html;charset = ISO-8859-1
Content-Length: 2717

Как вы можете видеть, клиентская программа explicity сказала серверу использовать http 1.0, но ответ инди-сервера был http 1.1.

РЕДАКТИРОВАТЬ:

Я понял, что лучшим решением является установка в событии OnCommandGet:

AResponseInfo.CloseConnection: = False;
AResponseInfo.Connection: = 'закрыть';

AResponseInfo.CloseConnection: = False заставляет сервер не отключаться от клиента, а Connection: = 'close' заставляет клиента отключаться от сервера, избегая серверов TIME_WAIT.

1 Ответ

1 голос
/ 23 февраля 2011

In IdCustomHTTPServer.pas

Строка версии 'HTTP / 1.1' жестко задана в методе TIdHTTPResponseInfo.WriteHeader.

Этот класс не имеет фабрики, которую вы можете переопределить, поэтому вы можетеизменить его поведение с потомком версии.Он явно создан в TIdCustomHTTPServer.DoExecute

Однако, поскольку у вас есть источник, вы можете изменить жестко запрограммированную строку на «HTTP / 1.0» или изменить ее поведение, чтобы оно отвечало на основании настройки свойства.

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

...