Co oznacza „Connection: close”, gdy jest używane w komunikacie odpowiedzi?

30

Gdy klient używa Connection: closenagłówka w komunikacie żądania, oznacza to, że chce, aby serwer zamknął połączenie po wysłaniu komunikatu odpowiedzi.

Myślałem, że ten nagłówek jest używany tylko w komunikatach żądania, ale zauważyłem, że jest on również używany w komunikatach odpowiedzi. Na przykład:

wprowadź opis zdjęcia tutaj

Co oznacza ten nagłówek, gdy jest używany w komunikacie odpowiedzi?

Myślę, że oznacza to, że serwer zamknie połączenie po wysłaniu odpowiedzi na wiadomość (nawet jeśli klient użył Connection: keep-alivenagłówka w komunikacie żądania). Mam rację?

użytkownik365656
źródło

Odpowiedzi:

28

Tak, to jest poprawne. Serwer może po prostu powiedzieć „Nie obsługuję twojego żądania utrzymania i po prostu zamknę połączenie, kiedy skończę”.

Z RFC 2616, sekcja 14.10:

HTTP / 1.1 definiuje opcję „zamknij” połączenie dla nadawcy, aby
zasygnalizować, że połączenie zostanie zamknięte po zakończeniu
odpowiedzi. Na przykład,

   Connection: close

w polach nagłówka żądania lub odpowiedzi wskazuje, że połączenie NIE POWINNY być uważane za „trwałe” (sekcja 8.1)
po zakończeniu bieżącego żądania / odpowiedzi.

Aplikacje HTTP / 1.1, które nie obsługują trwałych połączeń MUSZĄ zawierać opcję „zamknij” połączenie w każdej wiadomości.

Sven
źródło
3
To dziwne IMO, dlaczego powiedzieć, że połączenie zostanie zamknięte, jeśli serwer może je po prostu zamknąć? Klient nie powinien wtedy widzieć, że połączenie zostało zamknięte przez serwer. Wiesz, jaki był sens tego nagłówka? Nie widzę tu żadnej wartości.
Pavel P
1
@Pavel Aplikacja internetowa zawiera w odpowiedzi nagłówek http „Połączenie: zamknij” w przypadkach, gdy chce poinformować moduł równoważenia obciążenia frontonu, aby zamknąć połączenie podtrzymujące połączenie, jeśli moduł równoważenia obciążenia go używa.
Basil A
1
@BasilA, aby moduł równoważenia obciążenia zamyka połączenie z serwerem lub klientem? Moduł równoważenia obciążenia IMO widział, że połączenie zostało zamknięte przez serwer i wiedziałby o tym bez odczytywania nagłówków. Odwrotna jest również prawda: serwer może zamknąć połączenie bez Connection: closenagłówka
Pavel P
@Pavel Moduł równoważący obciążenie zwykle odbiera wiele połączeń od wielu klientów i wykorzystuje to samo połączenie z backendem, wykorzystując multipleksowanie poprzez połączenie podtrzymujące połączenie. Gdy niektóre backendy mogą nie chcieć być częścią tego multipleksowania, odpowiedź HTTP backendu powinna zawierać „Połączenie: zamknij”, aby poinformować moduł równoważenia obciążenia, aby zamknął połączenie i przestał multipleksować. Jest to szczegółowo opisane w Przewodniku równoważenia obciążenia AWS (Przewiń w dół do „Połączenia HTTP”) docs.aws.amazon.com/elasticloadbalancing/latest/userguide/…
Basil A
2
@BasilA Wygląda na to, że masz rację. Ciekawy. Pole Ogólne nagłówek połączenia pozwala nadawcy określić opcje, które są pożądane dla tego konkretnego połączenia i NIE MUSZĄ być przekazywane przez proxy przez dalsze połączenia.
Daniel F