Да, HTTP Keep Alive должен повторно использовать ваше TCP-соединение с сервером.Сервер добавляет Connection: keep-alive
заголовок с ответом, поэтому клиент поддерживает соединение.Таким образом, клиент не будет поддерживать соединение до тех пор, пока ваш сервер не ответит.
Итак, в вашем первом сценарии сервер отвечает заголовком, как только запрос получен.Таким образом, второй ответ (на самом деле может повторно использоваться, вам повезло, так как сервер отвечает на ваш запрос, прежде чем он отправит второй) повторно использует TCP-соединение.
Но во втором сценарии сервер ждет 2 секунды, чтобы отправить ответТаким образом, клиент не будет знать, что соединение должно оставаться активным до следующих 2 секунд.Но все остальные запросы нужно отправлять до этого, поэтому по умолчанию будет создаваться новое соединение для каждого HTTP-запроса.
Это может быть эффективно, если вам нужно постоянно вызывать HTTP-интерфейс, например, req -> res -> req -> res, но это также может быть неэффективно, если вы хотите получить независимый сбор данных с сервера.
Попробуйте на стороне клиента, если у вас есть какие-либо сомнения,
setTimeout(() => {
fetch('' + i).then(data => console.log(data));
setTimeout(function () {
for (let i = 2; i < 11; i++) {
fetch('' + i).then(data => console.log(data));
}
}, 5000)
}, 10000);