Прояснение заголовка Keep-alive

Мне было предложено создать сайт, и один из со-разработчиков сказал мне, что мне нужно будет включить заголовок keep-alive.

Хорошо, я много читал об этом, и у меня остались вопросы.

msdn →

Открытое соединение повышает производительность, когда клиент делает несколько запросы на содержимое веб-страницы, поскольку сервер может вернуть контента для каждого запроса быстрее. В противном случае сервер должен открыть новое соединение для каждого запроса

Глядя на

enter image description here

  • Когда IIS (F) отправляет заголовок keep alive (или пользователь отправляет keep-alive), означает ли это, что (E, C, B) сохранить соединение, которое предназначено только для моего сеанса?
  • Где хранится эта информация ( "это соединение принадлежит" Ройи ")?
  • Означает ли это, что никто не может использовать это соединение.
  • Если это так - означает ли это, что keep alive-header - уменьшить количество пользователей с перекрывающимся подключением?
  • если да, то как долго сохраняется соединение для меня? (другими словами, если я останусь в живых - "держи" до тех пор, пока?)

p.s. для тех, кто заинтересован:

нажав эта страница примера вернет заголовок заголовка

Ответ 1

Где хранится эта информация ( "это соединение между компьютерами A и сервером F" )?

TCP-соединение распознается IP-адресом источника, а также IP-портом и IP-адресом назначения. Ваша ОС, все промежуточные устройства, поддерживающие сеанс, и ОС сервера будут распознавать соединение.

HTTP работает с запросом-ответом: клиент подключается к серверу, выполняет запрос и получает ответ. Без поддержания работоспособности соединение с HTTP-сервером закрывается после каждого ответа. С помощью HTTP keep-alive вы держите базовое TCP-соединение открытым до тех пор, пока не будут выполнены определенные критерии.

Это позволяет использовать несколько пар запросов-ответчиков по одному TCP-соединению, исключая некоторые из медленных попыток подключения TCP.

Когда IIS (F) отправляет заголовок заголовка (или пользователь отправляет keep-alive), означает ли это, что (E, C, B) сохраняют соединение

Нет. Маршрутизаторам не нужно запоминать сеансы. На самом деле, несколько TCP-пакетов, принадлежащих одному TCP-сеансу, не все проходят через одни и те же маршрутизаторы - для управления TCP. Маршрутизаторы просто выбирают лучший IP-путь и пересылают пакеты. Keep-alive предназначен только для клиентских, серверных и любых других промежуточных устройств, поддерживающих сеанс.

который предназначен только для моего сеанса?

Означает ли это, что никто не может использовать это соединение

Это намерение TCP-соединений: это сквозное соединение, предназначенное только для двух сторон.

Если это так - означает ли это, что keep alive-header - уменьшить количество пользователей с перекрывающимся подключением?

Определите "перекрывающиеся соединения". См. HTTP-постоянное соединение для некоторых преимуществ и недостатков, таких как:

  • Уменьшение использования ЦП и памяти (так как меньше подключений одновременно открываются).
  • Включает HTTP-конвейерную обработку запросов и ответов.
  • Снижение перегрузки сети (меньше TCP-соединений).
  • Уменьшенная латентность в последующих запросах (без установления связи).

если да, то как долго сохраняется соединение для меня? (другими словами, если я останусь в живых - "держи" до тех пор, пока?)

Типичный ответ keep-alive выглядит следующим образом:

Keep-Alive: timeout=15, max=100

Смотрите например, протокол гипертекстовой передачи (HTTP) Keep-Alive Header (черновик для HTTP/2, где объясняется заголовок keep-alive более подробно, чем 2616 и 2086):

  • Хост устанавливает значение параметра timeout на время, когда хост будет разрешать незанятое соединение оставаться открытым до его закрытия. Соединение простаивает, если данные не отправляются или не принимаются хостом.

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

Однако сервер может закрыть соединение после произвольного времени или количества запросов (до тех пор, пока он возвращает ответ на текущий запрос). Как это реализовано, зависит от вашего HTTP-сервера.