Що означає "З'єднання: закрити", коли використовується у відповіді?


30

Коли клієнт використовує Connection: closeзаголовок у повідомленні запиту, це означає, що він хоче, щоб сервер закрив з'єднання після відправлення відповіді.

Я думав, що цей заголовок використовується лише у повідомленнях запиту, але я помітив, що він також використовується у повідомленнях відповідей. Наприклад:

введіть тут опис зображення

Що означає цей заголовок, коли він використовується у відповіді?

Я думаю, що це означає, що сервер закриє з'єднання після відправлення відповіді на повідомлення (навіть якщо клієнт використовував Connection: keep-aliveзаголовок у своєму запиті). Я прав?

Відповіді:


28

Так, це правильно. Сервер може просто сказати: "Я не підтримую ваш запит на зберігання, і я просто закрию з'єднання, коли закінчу".

З RFC 2616, розділ 14.10:

HTTP / 1.1 визначає опцію "закрити" з'єднання для відправника, який
сигналізує про те, що з'єднання буде закрито після завершення
відповіді. Наприклад,

   Connection: close

або в полях запиту, або в заголовку відповіді вказує, що з'єднання НЕ БУДЕ вважатися стійким (розділ 8.1)
після завершення поточного запиту / відповіді.

Програми HTTP / 1.1, які не підтримують стійкі з'єднання, ОБОВ'ЯЗКОВО включають опцію "закрити" у кожному повідомленні.


3
Це дивно IMO, навіщо говорити, що з'єднання буде закритим, якщо сервер може просто його закрити? Якщо клієнт не повинен просто побачити, що з'єднання було закрито сервером. Будь-яка ідея, що було в цьому заголовку? Я не бачу тут ніякої цінності.
Павло П

1
@Pavel Веб-додаток включає відповідь заголовка http "З'єднання: закрити" у випадках, коли він хоче повідомити балансир навантажувача, щоб закрити з'єднання, що зберігається в живому випадку, якщо балансир навантаження використовує такий.
Василь А

1
@BasilA, щоб балансир завантаження закривав з'єднання з сервером або клієнтом? Балансир завантаження IMO міг бачити, що з'єднання закрито сервером, і це знає, не читаючи жодних заголовків. Так само зворотне: сервер може закрити з'єднання без Connection: closeзаголовка
Павло П

@Pavel Ваговий балансир зазвичай отримує декілька з'єднань від декількох клієнтів і використовує одне і те ж з'єднання з бекендером, використовуючи мультиплексування через постійне з'єднання. Коли деякі пакети програм можуть не захотіти бути частиною цього мультиплексування, відповідь HTTP-сервера повинна містити "З'єднання: закрити", щоб повідомити балансиру навантаження про закриття зв'язку та припинення мультиплексування. Це докладно описано в Посібнику з балансування навантаження AWS (прокрутіть униз до "З'єднання HTTP") docs.aws.amazon.com/elasticloadbalancing/latest/userguide/…
Василь А

2
@BasilA Схоже, ти маєш рацію. Цікаво. Поле загального заголовка З'єднання дозволяє відправника вказати параметри, які бажані для цього конкретного з'єднання, і НЕ ОБ'ЄДНАТЬ передавати проксі-сервери через подальші з'єднання.
Даніель Ф
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.