Когда именно происходит TCP-рукопожатие в XMLHttpRequest? - PullRequest
0 голосов
/ 31 мая 2019

Интерфейс XMLHttpRequest обеспечивает метод open() и send().

В следующем примере кода:

var xhr = new XMLHttpRequest();
xhr.open('GET', '/server', true);

xhr.onload = function () {
  // Request finished. Do processing here.
};

xhr.send('string');

Происходит ли TCP-рукопожатие при вызове send() или open()?

Ответы [ 2 ]

1 голос
/ 01 июня 2019

Только с версией HTTP меньше 1.1 время жизни запросов и их базовое соединение напрямую связаны.

Время жизни HTTP-запроса не зависит от времени жизни его базового соединения, начиная с HTTP 1.1.Многие запросы могут быть переданы по конвейеру по одному соединению.

XMLHttpRequest.open - это абстракция, удобная для пользователя, но скрытая, если в браузере уже есть доступные сокеты, подключенные к хосту, их можно использовать повторно, что означает, что рукопожатие TCP произошло некотороевремя назад, независимо от всех, кроме первого запроса, прошедшего через соединение.

0 голосов
/ 01 июня 2019

Некоторое краткое тестирование с tcpdump подтвердило то, что подозревалось в комментариях.При вызове open() сетевые вызовы не выполняются вообще.Вся информация о сети передается при вызове send().

Кроме того, нет гарантии, что send() также выполняет квитирование.XMLHttpRequest s иногда повторно используют постоянные соединения из предыдущих запросов, и поэтому не требуют нового рукопожатия.

...