Ошибки веб-сервера Delphi Indy HTTPS (EOF, который нарушает протокол) - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь добавить поддержку HTTPS на существующий веб-сервер, написанный на Delphi XE7 с использованием Indy. Я написал простое приложение, которое просто возвращает отметку даты / времени для каждого запроса HTTPS.

Я добавил обработчики к событиям OnCommandGet и OnException:

procedure TForm13.HTTPServerCommandGet(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
  AResponseInfo.ContentText := DateTimeToStr(Now());
  AResponseInfo.ContentEncoding := 'utf8';

  Log('Request: %s', [ARequestInfo.URI]);
end;

procedure TForm13.HTTPServerException(AContext: TIdContext; AException: Exception);
begin
  Log('Exception raised %s:%s', [AException.ClassName, AException.Message]);
end;

Код привязки:

  with HTTPServer do
   begin
     with Bindings.Add() do
      begin
        IP := '0.0.0.0';
        Port := 443;
      end;

     Active := true;
   end;

Когда я выполняю запрос из браузера, в большинстве случаев я получаю это:

12.03.2019 0:50:29  Exception raised EIdConnClosedGracefully:Connection Closed Gracefully.
12.03.2019 0:50:29  Exception raised EIdConnClosedGracefully:Connection Closed Gracefully.
12.03.2019 0:50:30  Request: /
12.03.2019 0:50:30  Exception raised EIdConnClosedGracefully:Connection Closed Gracefully.
12.03.2019 0:50:30  Request: /favicon.ico
12.03.2019 0:51:00  Exception raised EIdSocketError:Socket Error # 10060    Connection timed out.

Обслуживает запрос, а браузер показывает метку времени. Но почему изящное закрытие соединения вызывает исключение?

Что меня беспокоит, так это то, что иногда через 30 секунд после последнего запроса я получаю еще одно исключение, например:

12.03.2019 1:44:53  Exception raised EIdConnClosedGracefully:Connection Closed Gracefully.
12.03.2019 1:44:53  Exception raised EIdConnClosedGracefully:Connection Closed Gracefully.
12.03.2019 1:44:53  Request: /
12.03.2019 1:44:54  Exception raised EIdConnClosedGracefully:Connection Closed Gracefully.
12.03.2019 1:44:54  Request: /favicon.ico
12.03.2019 1:45:24  Exception raised EIdOSSLAcceptError:Error accepting connection with SSL. EOF was observed that violates the protocol

Это происходит случайно, иногда это тайм-аут, иногда этот. Это выглядит неправильно для меня. Есть идеи, почему это происходит?

PS: в Delphi 10.3 это происходит так же, как в Delphi XE7, поэтому, вероятно, затронуты все версии Indy.

1 Ответ

0 голосов
/ 29 апреля 2019

Наконец-то выяснилось, что все эти странные ошибки появляются только в случае самостоятельно сгенерированного сертификата, который не установлен на клиентском устройстве.

...