HTTPQUERY
Русский

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