Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Странное поведение Indy (TIdHttp)  [new]
KinsT_UA
Member

Откуда: Киев
Сообщений: 103
Добрый день!

Есть десктопное приложение, которое обращается к файловому сервису через компонент TIdHttp и с помощью метода POST получает ответ в формате JSON.
JSON-параметр "file_data" содержит тело файла в кодировке BASE64.

В компании создали клон проекта, настроили отдельные сервера (в облаке).

СУТЬ ПРОБЛЕМЫ
При обращении к базовому сервису - все работает отлично.
При обращении к клону через TChromium.Browser.MainFrame.LoadRequest (компоненты CEF4) - срабатывает от 1 до 3 миллисекунд.
При обращении к клону через TIdHttp - наблюдается задержка получения ответа (до 15 секунд для файла размером 495 КБ)!

TIdHttp пробовал использовать как из кода, так и на форму бросал.
Эффект одинаково плохой. Никаких спец.настроек для компонента не произвожу.

Понимаю, что проблема вероятнее всего в окружении,
но админы крест на пузе рисуют и говорят, что единственное отличие это то,
что старые сервера распределенные (физически разные), а новые в одном дата-центре и одном облаке.

Знающие люди, подскажите пожалуйста, может быть есть какая-то настройка в самом Indy?

procedure TMainForm.DwnlWithIndy;
var vURL : string;
  vDataId : TIdMultiPartFormDataStream;
  vResponse : string;
  vJSON: TJSONObject;
  vSS : TStringStream;
  vIdHttp : TIdHTTP;
begin
  vIdHttp := TIdHTTP.Create(Self);
  try
    // Параметры запроса;
    vDataId := TIdMultiPartFormDataStream.Create;
    vDataId.AddFormField('path', ePathSrv.Text).ContentTransfer := '8bit';
    vDataId.AddFormField('compression_mode', 'BASE64');
    vDataId.AddFormField('response_type', 'JSON');

    // URL для отправки запроса;
    vURL := cbbHost.Text + '?show_file';

    memoRequest.Clear;
    memoRequest.Lines.Add(DateTimeToStr(Now)+#13#10+'Request params added!');

    // Отправка POST запроса;
    memoResponse.Clear;
    memoResponse.Lines.Add('Download START: '+#09+DateTimeToStr(Now));
    vResponse := vIdHttp.Post(vURL, vDataId);
    memoResponse.Lines.Add('Download END: '+#09+DateTimeToStr(Now));

    // Сохранение результата выполнения запроса;
    vSS := TStringStream.Create(vResponse);
    try
      vSS.SaveToFile('response.json');

      // Сохранение файла на ПК;
      vJSON := TJSONObject.ParseJSONValue(vResponse, False, True) as TJSONObject;
      vSS := TStringStream.Create(vJSON.Values['file_data'].Value);
      vSS.SaveToFile('vid.mp4');
    finally
      FreeAndNil(vSS);
    end;
  finally
    FreeAndNil(vIdHttp);
  end;
end;
13 сен 21, 10:53    [22370999]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Indy (TIdHttp)  [new]
KinsT_UA
Member

Откуда: Киев
Сообщений: 103


К сообщению приложен файл. Размер - 122Kb
13 сен 21, 10:53    [22371000]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Indy (TIdHttp)  [new]
KinsT_UA
Member

Откуда: Киев
Сообщений: 103


К сообщению приложен файл. Размер - 102Kb
13 сен 21, 10:53    [22371001]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Indy (TIdHttp)  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 27177
KinsT_UA
но админы крест на пузе рисуют и говорят, что единственное отличие это то,
что старые сервера распределенные (физически разные), а новые в одном дата-центре и одном облаке.

Хромом проверяешь и отдаешь результат админам. Пусть работу работают, а не кресты рисуют.
13 сен 21, 10:57    [22371004]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Indy (TIdHttp)  [new]
KinsT_UA
Member

Откуда: Киев
Сообщений: 103
wadman
KinsT_UA
но админы крест на пузе рисуют и говорят, что единственное отличие это то,
что старые сервера распределенные (физически разные), а новые в одном дата-центре и одном облаке.

Хромом проверяешь и отдаешь результат админам. Пусть работу работают, а не кресты рисуют.


В том-то и дело, что из браузера Хром на новом сервере, срабатывает моментально.
Конкретно Инди странно работает :(
Может быть какой-то либы не хватает?
13 сен 21, 11:11    [22371010]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Indy (TIdHttp)  [new]
Softologic
Member

Откуда: Питер
Сообщений: 318
KinsT_UA
wadman
пропущено...

Хромом проверяешь и отдаешь результат админам. Пусть работу работают, а не кресты рисуют.


В том-то и дело, что из браузера Хром на новом сервере, срабатывает моментально.
Конкретно Инди странно работает :(
Может быть какой-то либы не хватает?

Инди она такая... Порой дико глючная, но в целом, да - странная, вне зависимости от версии :)
Лучше уже что то другое выберите. Из бесплатного еще ICS и SYNAPSE есть.
13 сен 21, 11:13    [22371013]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Indy (TIdHttp)  [new]
asutp2
Member

Откуда: Тюмень
Сообщений: 886
Весьма хорош TNetHttpClient, который из коробки
13 сен 21, 11:37    [22371038]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Indy (TIdHttp)  [new]
rgreat
Member

Откуда:
Сообщений: 6829
asutp2,

+1

TIdHttp - не нужен.
13 сен 21, 11:39    [22371041]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Indy (TIdHttp)  [new]
Softologic
Member

Откуда: Питер
Сообщений: 318
asutp2
Весьма хорош TNetHttpClient, который из коробки

Кстати, да: https://webdelphi.ru/2019/02/http-client-api-v-delphi/
13 сен 21, 12:33    [22371078]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Indy (TIdHttp)  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 872
Возможно, сервер не отдает content-length, но на старом сервере рвет коннект, а на новом keep-alive. Вот клиент и ждет у моря погоды. Сравни полный дамп сеансов.
Еще для исключения влияния протокола можно попробовать отправлять запрос через голый сокет.

Сообщение было отредактировано: 13 сен 21, 13:59
13 сен 21, 14:08    [22371172]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Indy (TIdHttp)  [new]
DmSer
Member

Откуда: Пенза
Сообщений: 1431
Запротоколируйте обмен между Indy и старым сервером и новым сервером. Найдите, в чём разница.
Может редирект какой-нибудь появился.
13 сен 21, 14:27    [22371182]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Indy (TIdHttp)  [new]
KinsT_UA
Member

Откуда: Киев
Сообщений: 103
Доброе утро!

Огромное спасибо всем, кто поучаствовал!

Как писали asutp2, rgreat и Softologic, попробовали TNetHttpClient - работает отлично!
На всякий случай скачал и другие компоненты )

Fr0sT-Brutal
Возможно, сервер не отдает content-length, но на старом сервере рвет коннект, а на новом keep-alive. Вот клиент и ждет у моря погоды. Сравни полный дамп сеансов.
Чем можно такой дамп отследить? Дайте что-нибудь на почитать об этом, пожалуйста!

DmSer
Запротоколируйте обмен между Indy и старым сервером и новым сервером.
Тот же вопрос: чем/как это осуществить?
Мы ставили снифер и пытались пакеты смотреть, по итогу: "очень интересно, но ничего не понял" (ц) :)

DmSer
Может редирект какой-нибудь появился.
Доп. редиректов нет. Смотрели через tracert. На новом серваке даже меньше переходов, чем на старом Оо
14 сен 21, 09:46    [22371594]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Indy (TIdHttp)  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 13113
KinsT_UA
Чем можно такой дамп отследить?
Wireshark
KinsT_UA
очень интересно, но ничего не понял
Так смотрите HTTP-заголовки
14 сен 21, 10:18    [22371614]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Indy (TIdHttp)  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 872
Если соединение не через TLS, то SmSniff очень простой и понятный сниффер. Если TLS, то чуть сложнее - Wireshark с установкой их сертификата. Будет много инфы со всех сетевых уровней, но надо искать HTTP команды. Мануалов в сети много

Сообщение было отредактировано: 14 сен 21, 10:15
14 сен 21, 10:25    [22371618]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Indy (TIdHttp)  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 13113
Fr0sT-Brutal
Wireshark с установкой их сертификата.
О! Он уже умеет https? Не знал.
14 сен 21, 11:10    [22371642]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Indy (TIdHttp)  [new]
DmSer
Member

Откуда: Пенза
Сообщений: 1431
_Vasilisk_
Fr0sT-Brutal
Wireshark с установкой их сертификата.
О! Он уже умеет https? Не знал.


Гениальная штука https!
Вроде всё шифрует, хрен влезешь.
Про при большом желании ставишь свой сертификат и все видно!
14 сен 21, 12:12    [22371669]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Indy (TIdHttp)  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 27177
DmSer
Вроде всё шифрует, хрен влезешь.

В итоге ничего не шифрует. Это как налог на ТКО. Денег собрали, а смысла-то и нет.

Я на телефоне могу посмотреть трафик любого приложения. Будь то хоть банк, хоть еще какое-то "важное" приложение. Да и любой может. Афера мирового масштаба. :)
14 сен 21, 12:16    [22371673]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Indy (TIdHttp)  [new]
DmSer
Member

Откуда: Пенза
Сообщений: 1431
KinsT_UA


DmSer
Запротоколируйте обмен между Indy и старым сервером и новым сервером.


Тот же вопрос: чем/как это осуществить?
Мы ставили снифер и пытались пакеты смотреть, по итогу: "очень интересно, но ничего не понял" (ц) :)


В составе Indy есть компонент для логгирования (вроде TIdLog, но могу ошибаться).
Также есть Handler'ы, в которых можно ловить весь (или почти весь) обмен.

Ещё можно через Fiddler логгировать. В этом случае для IdHTTP нужно указать имя и порт прокси.
Но Fiddler собака сейчас стал платным.
14 сен 21, 12:26    [22371677]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Indy (TIdHttp)  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 872
_Vasilisk_
Fr0sT-Brutal
Wireshark с установкой их сертификата.
О! Он уже умеет https? Не знал.

Да, причем и портабельная версия тоже
DmSer
Гениальная штука https!
Вроде всё шифрует, хрен влезешь.
Про при большом желании ставишь свой сертификат и все видно!

wadman
В итоге ничего не шифрует. Это как налог на ТКО. Денег собрали, а смысла-то и нет.

Всё он шифрует. Но ведь странно как-то иметь непонятный трафик на своей машине и не мочь его посмотреть. И потом, если у клиента есть cert pinning, то хренушки что-то выйдет со сниффингом. Хотя, наверно, можно подменить домен через hosts или DNS, и сделать серт на это доменное имя. Тогда, если клиент не совсем уж паранойный и не проверяет цепочки сертов, может прокатить.

Также, если клиент особо не заморачивается с проверкой, можно сделать простейший TLS=>TLS ретранслятор, который бы писал весь трафик.

Сообщение было отредактировано: 14 сен 21, 15:24
14 сен 21, 15:32    [22371763]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Indy (TIdHttp)  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 27177
Fr0sT-Brutal
И потом, если у клиента есть cert pinning, то хренушки что-то выйдет со сниффингом

Хочешь сказать, что банковские приложения создают люди, которые не в теме?
Иначе как я смотрю трафик их приложений на телефоне?
14 сен 21, 15:35    [22371765]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Indy (TIdHttp)  [new]
cptngrb
Member

Откуда:
Сообщений: 699
HTTP Analyzer v7 мне нравиться, а для остального WireShark
14 сен 21, 17:09    [22371819]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Indy (TIdHttp)  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 872
wadman
Хочешь сказать, что банковские приложения создают люди, которые не в теме?
Иначе как я смотрю трафик их приложений на телефоне?

Не боги горшки обжигают. Стряпать приложухи тяп-ляп и всех насильно на них пересаживать много ума не надо
14 сен 21, 17:11    [22371821]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Indy (TIdHttp)  [new]
KinsT_UA
Member

Откуда: Киев
Сообщений: 103
Из интересного в продолжение темы :)

Когда попробовали через протокол HTTPS, то всё срабатывает за 1 секунду даже при базовой реализации через Indy.
17 сен 21, 11:37    [22372891]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Indy (TIdHttp)  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 872
То есть у вас до этого был простой открытый HTTP и ты до сих пор не сравнил дампы запросов?
17 сен 21, 13:59    [22372955]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение Indy (TIdHttp)  [new]
Cobalt747
Member

Откуда:
Сообщений: 2357
Fr0sT-Brutal,

Но виновато конечно же Indy
вчера, 00:56    [22373148]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Delphi Ответить