Почему начальные соединения всегда медленнее

367
Kirk122

Я впервые заметил это при использовании Insomnia (HTTP-клиенты) для тестирования некоторых моих конечных точек API.

Первый запрос, который я делаю к своему API-серверу (и другим), всегда составляет 100 мс +, но последовательные запросы всегда очень быстры с точки зрения задержки.

First Request Image

Second Request Image

Как это возможно? Я пытался отправлять случайные данные каждый запрос, и это все еще происходит. Я также недавно слышал о протоколе QUIC от Google, который предназначен для сокращения количества обращений за запросом рукопожатия с ~ 3 до 0 для обычных серверов. Это имеет большой смысл в том, что происходит, но QUIC еще даже не развернут в Интернете.

2
DNS задействован? Kamil Maciorowski 5 лет назад 2
Ха-ха. Вот и все. Но почему DNS занимает 100 мс +? Kirk122 5 лет назад 0
Это действительно зависит от вашей настройки. Но одним из возможных объяснений (с учетом DNS) будет то, что у вашего клиента нет кэшированной записи для этого сервера. Поэтому, прежде чем отправлять запрос, необходимо выполнить поиск DNS, чтобы узнать, к какому серверу подключиться. Сервер и ваш клиент также могут поддерживать поддержку активности, поэтому, возможно, соединение не закрывается между запросами. Seth 5 лет назад 2
QUIC может уменьшить задержки, но не до нуля. Он работает путем создания своего собственного механизма, который ведет себя примерно так же, как и при использовании udp, и преодолевает некоторые ограничения в протоколе tcp. Это не волшебство, хотя. davidgo 5 лет назад 0
Это также может быть управление сеансом на удаленной конечной точке. При первом подключении он выделяет ресурсы для подключения и запускает потоки. После этого вы просто повторно используете одни и те же ресурсы, пока они не прекратят работу и не освободятся. Appleoddity 5 лет назад 0
Если вы используете HTTPS, он может кэшировать сеанс TLS, что может сэкономить много времени при настройке соединения. Это может также просто держать соединение открытым после первого запроса (что, конечно, устраняет время установки соединения). Austin Hemmelgarn 5 лет назад 0
@AustinHemmelgarn Это нормальное поведение для нормальных HTTP API с ванильными HTTP клиентами? например, экспресс / хапи с почтальоном. Kirk122 5 лет назад 0
@ Kirk122 Это не «нормально», но и не «ненормально», это действительно зависит только от фреймворка. Например, если вы используете HTTP / 2, вы почти гарантированно будете конвейеризовывать запросы (это неявная часть HTTP / 2). Если вы используете HTTP / 1.0 (или 0.9), вы по своей сути не конвейерны. Для HTTP / 1.1 он в конечном итоге зависит от конфигурации сервера и среды приложения. Austin Hemmelgarn 5 лет назад 0

1 ответ на вопрос

0
Keltari

Как уже упоминалось в комментариях к вашему первоначальному сообщению, это может быть DNS, что является очень разумной идеей относительно причины задержки.

Тем не менее, у нас нет возможности узнать фактический ответ на ваш вопрос. Мы не знаем, что происходит с вашей настройкой, и мы не можем без доступа.

Существует инструмент, который вы можете использовать для диагностики проблемы. Fiddler - отличный инструмент, который я очень рекомендую. Это может помочь диагностировать сетевые проблемы. Я предлагаю вам попробовать.

Похожие вопросы