Wyjaśnienie nagłówka Keep-Alive

106

Poproszono mnie o zbudowanie witryny, a jeden ze współtwórców powiedział mi, że będę musiał dołączyć nagłówek keep-alive.

Cóż, dużo o tym czytałem i wciąż mam pytania.

msdn ->

Otwarte połączenie poprawia wydajność, gdy klient wysyła wiele żądań dotyczących zawartości strony sieci Web, ponieważ serwer może szybciej zwrócić zawartość każdego żądania. W przeciwnym razie serwer będzie musiał otwierać nowe połączenie dla każdego żądania

Patrzeć na

wprowadź opis obrazu tutaj

  • Kiedy IIS (F) wysyła keep alivenagłówek ( lub użytkownik wysyła keep-alive ), to znaczy, że ( E, C, B) Zapisz połączenia, które jest tylko dla mojej sesji?
  • Gdzie są przechowywane te informacje ( „to połączenie należy do„ Royi ” )?
  • Czy to oznacza, że ​​nikt inny nie może korzystać z tego połączenia
  • Jeśli tak - czy to oznacza, że ​​utrzymuj aktywny nagłówek - zmniejsz liczbę nakładających się użytkowników połączenia?
  • jeśli tak, to jak długo połączenie jest dla mnie zachowywane? (Innymi słowy, jeśli ustawię opcję „keep alive” - „trzymaj” do kiedy?)

ps dla zainteresowanych:

kliknięcie tej przykładowej strony spowoduje zwrócenie nagłówka Keep Alive

Royi Namir
źródło
2
Pfff, widziałem to na wykładzie, ale nie jestem do końca pewien. Myślałem, że utrzymywanie przy życiu jest tylko na serwerze i na użytkowniku. W końcu wszystko pomiędzy nie powinno nawet wiedzieć, że to HTTP, nie mówiąc już o spojrzeniu na nagłówki.
Noctua
Oświadczenie cytowane z MSDN jest bezsensowne. To klient musi otworzyć nowe połączenie, jeśli nie ma funkcji utrzymywania przy życiu.
Markiz Lorne
A jeśli tworzysz witrynę, a nie serwer WWW lub klienta, nagłówek keepalive jest już gotowy.
Markiz Lorne

Odpowiedzi:

144

Gdzie są przechowywane te informacje („to połączenie jest między komputerem Aa serwerem F”)?

Połączenie TCP jest rozpoznawane na podstawie źródłowego adresu IP i portu oraz docelowego adresu IP i portu. Twój system operacyjny, wszystkie pośrednie urządzenia obsługujące sesję i system operacyjny serwera rozpoznają połączenie w ten sposób.

HTTP działa z żądaniem odpowiedzi: klient łączy się z serwerem, wykonuje żądanie i otrzymuje odpowiedź. Bez utrzymywania aktywności połączenie z serwerem HTTP jest zamykane po każdej odpowiedzi. Dzięki utrzymywaniu aktywności HTTP utrzymujesz otwarte połączenie TCP, dopóki nie zostaną spełnione określone kryteria.

Pozwala to na wiele par żądanie-odpowiedź w ramach jednego połączenia TCP, eliminując niektóre stosunkowo powolne uruchamianie połączenia TCP.

Kiedy IIS (F) wysyła nagłówek utrzymywania aktywności (lub użytkownik wysyła utrzymywanie aktywności), czy to oznacza, że ​​(E, C, B) zapisują połączenie

Nie. Routery nie muszą pamiętać sesji. W rzeczywistości wiele pakietów TCP należących do tej samej sesji TCP nie musi przechodzić przez te same routery - to jest do zarządzania przez TCP. Routery po prostu wybierają najlepszą ścieżkę IP i przekazują pakiety. Funkcja utrzymywania aktywności jest dostępna tylko dla klienta, serwera i wszelkich innych pośrednich urządzeń obsługujących sesję.

który jest tylko na moją sesję?

Czy to oznacza, że ​​nikt inny nie może korzystać z tego połączenia

Taka jest intencja połączeń TCP : jest to połączenie typu end-to-end przeznaczone tylko dla tych dwóch stron.

Jeśli tak - czy to oznacza, że ​​utrzymuj aktywny nagłówek - zmniejsz liczbę nakładających się użytkowników połączenia?

Zdefiniuj „nakładające się połączenia”. Zobacz trwałe połączenie HTTP, aby poznać niektóre zalety i wady, takie jak:

  • Mniejsze zużycie procesora i pamięci (ponieważ mniej połączeń jest otwartych jednocześnie).
  • Włącza potokowanie HTTP żądań i odpowiedzi.
  • Zmniejszone przeciążenie sieci (mniej połączeń TCP).
  • Zmniejszone opóźnienie w kolejnych żądaniach (bez uzgadniania).

jeśli tak, to jak długo połączenie jest dla mnie zachowywane? (Innymi słowy, jeśli ustawię opcję „keep alive” - „trzymaj” do kiedy?)

Typowa reakcja na utrzymanie przy życiu wygląda następująco:

Keep-Alive: timeout=15, max=100

Zobacz na przykład nagłówek Keep-Alive protokołu HTTP (Hypertext Transfer Protocol) (szkic dla HTTP / 2, w którym nagłówek Keep-Alive jest wyjaśniony bardziej szczegółowo niż oba 2616 i 2086 ):

  • Host ustawia wartość timeoutparametru na czas, przez który host pozwoli na pozostawienie bezczynnego połączenia otwartego, zanim zostanie zamknięte. Połączenie jest bezczynne, jeśli żadne dane nie są wysyłane ani odbierane przez hosta.

  • maxParametr określa maksymalną liczbę żądań, które klient będzie sprawiają, lub że serwer pozwoli być wykonane na stałe połączenie. Po wysłaniu określonej liczby żądań i odpowiedzi host zawierający parametr może zamknąć połączenie.

Jednak serwer może zamknąć połączenie po dowolnym czasie lub liczbie żądań (pod warunkiem, że zwraca odpowiedź na bieżące żądanie). Sposób implementacji zależy od serwera HTTP.

CodeCaster
źródło
Zdefiniuj „nakładające się połączenia” ----> mam na myśli jednocześnie. (i myślę, że liczba jednoczesnych połączeń zostanie zmniejszona, ponieważ, jak powiedziałeś: „połączenie X jest zarezerwowane dla Johna, ponieważ używa nagłówka podtrzymującego aktywność.” .... mam rację?
Royi Namir
1
Więc mówisz, że jeśli serwer może obsłużyć 100 połączeń naraz, a wszystkie te połączenia używają funkcji utrzymywania aktywności, to 101-te połączenie zostanie zrzucone ???
Royi Namir
1
@Royi nie, nie wiem, ile podtrzymujących połączeń przeglądarka tworzy z danym hostem i nie chciałem powiedzieć, że przeglądarka otworzy tylko jedno. Liczba żądań wysyłanych jednocześnie jest ograniczona i różni się w zależności od przeglądarki . Chodziło mi o to, że jeśli przeglądarka używa połączeń utrzymujących aktywność, może zamiast odpalać Nżądania przez Npołączenia (ponieważ domyślnie połączenie jest zamykane po każdej odpowiedzi), na przykład Nżądania odpalania przez połączenia N / Mlub nawet tylko Mpołączenia, ponieważ może uruchamiać wiele żądań w każde otwarte połączenie, więc można użyć mniej.
CodeCaster
1
Wiem o tym. (:-)) powiedziałeś w swoim komentarzu: klient będzie wykonywał mniej jednoczesnych połączeń podczas korzystania z funkcji utrzymywania aktywności, będzie uruchamiał żądania szeregowo, a nie równolegle . Po prostu nie rozumiem, jak to się ma do utrzymywania życia.
Royi Namir
5
E, C, B nie zapisują sesji. To są routery, nie mają żadnej tablicy sesji i nie muszą, ponieważ wiele pakietów z tej samej sesji TCP klient-serwer może podążać różnymi ścieżkami. Zadaniem routera jest wybranie najlepszej ścieżki IP i odpowiednie przekazanie pakietu, tak aby nie przeszedł do warstwy transportowej (TCP / UDP) ani nie przeszedł do warstwy aplikacji w celu wyświetlenia nagłówka keep-alive. Więc w zasadzie utrzymania aktywności jest wyraźnie między klientem a serwerem, a pośrednio to pozwala sesja urządzenia świadomi -eg firewalls- otworzył do tej wyraźnej sesji klient-serwer
Amine Kadimi