Connection
Применение
Заголовок Connection — это заголовок уровня отдельного перехода (hop-by-hop) в HTTP/1.1, используемый для управления жизненным циклом нижележащего TCP-соединения. Клиент или сервер добавляет этот заголовок, чтобы сообщить, сохраняется ли соединение для дополнительных запросов или закрывается после текущего обмена.
В HTTP/1.1 постоянные соединения являются поведением по умолчанию. Отправка Connection: keep-alive формально избыточна, но на практике остаётся распространённой. Заголовок Keep-Alive работает вместе с заголовком Connection, задавая тайм-аут и ограничения на количество запросов для постоянных соединений.
Заголовок Connection выполняет и вторую роль: он перечисляет имена полей заголовков уровня отдельного перехода, присутствующих в сообщении. Промежуточные узлы (прокси, шлюзы) удаляют любой заголовок, перечисленный в значении Connection, перед пересылкой сообщения на следующий переход.
Примечание
В HTTP/1.0 по умолчанию соединение закрывалось после каждого цикла «запрос-ответ», и для постоянных соединений требовался Connection: keep-alive. В HTTP/1.1 умолчание изменилось на противоположное, поэтому соединения сохраняются, пока явно не отправлен Connection: close. Отправляйте Connection: close после последнего запроса в серии, чтобы освободить ресурсы сервера, или когда сервер работает под высокой нагрузкой.
Примечание
Заголовок Connection запрещён в HTTP/2 и HTTP/3. Эти протоколы управляют жизненным циклом соединения через собственные уровни кадрирования. Прокси, выполняющие преобразование между HTTP/1.1 и HTTP/2, удаляют этот заголовок автоматически.
keep-alive
Директива keep-alive сообщает, что отправитель хочет сохранить соединение открытым для последующих запросов. В HTTP/1.1 это поведение по умолчанию. При её наличии заголовок Keep-Alive предоставляет такие параметры, как тайм-аут простоя и максимальное количество запросов.
close
Директива close указывает другой стороне закрыть соединение после завершения текущей пары «запрос-ответ». В HTTP/1.0 закрытие после каждой транзакции было поведением по умолчанию.
Пример
Клиент отправляет запрос с явной директивой keep-alive. Это указывает серверу удерживать TCP-соединение открытым после доставки ответа.
GET /api/status HTTP/1.1
Host: api.example.re
Connection: keep-alive
Сервер сообщает, что соединение будет закрыто после доставки этого ответа. Для следующего запроса клиент открывает новое TCP-соединение.
HTTP/1.1 200 OK
Content-Type: application/json
Connection: close
Заголовок Connection также перечисляет заголовки уровня отдельного перехода. В этом примере прокси удаляет заголовок X-Debug-Token перед пересылкой сообщения.
GET /resource HTTP/1.1
Host: example.re
Connection: keep-alive, X-Debug-Token
X-Debug-Token: abc123