HTTP/2 Server Push – opcjonalny mechanizm protokołu HTTP/2 pozwalający jego serwerowi na wysyłanie zasobów do klienta, zanim ten zażąda wysyłanych treści[1]. Założeniem mechanizmu było zmniejszenie latencji dostarczania danych niezbędnych do ładowania stron internetowych.

Opis działania edytuj

W tradycyjnym dialogu HTTP klient ładujący stronę internetową składającą się z trzech zasobów: index.html, styles.css i script.js, najpierw wyśle żądanie o zasób HTML. W trakcie jego przetwarzania wykryje odniesienia do arkusza styli oraz skryptu. Dopiero w tym momencie przeglądarka może wysłać zapytania o brakujące zasoby.

W powyższym dialogu serwer posiadający implementację push może przejąć inicjatywę, o ile posiada reguły, które pozwolą mu zdecydować, że po wysłaniu pliku HTML powinien wysłać do klienta arkusz styli oraz plik skryptu. Dzięki temu, gdy przeglądarka zakończy przetwarzanie index.html, arkusz styli oraz skrypt będą już dostępne lub w trakcie odbierania. Mechanizm może zmniejszyć narzut czasu spowodowany kolejkowaniem żądań o poszczególne elementy strony[1]. Do poprawnego działania wymaga on jednak, aby serwer znał zależności pomiędzy poszczególnymi składowymi stron.

Jednocześnie wypychane zasoby mogą być z różnych względów zbędne klientom, powodując niepotrzebne obciążenie połączenia czy rachunku za ilość danych. Z racji, że serwery nie znają zawartości cache przeglądarek, mogą wypychać zasoby już posiadane przez klienta, czy wręcz mu zbędne jak arkusze styli, ilustracje czy skrypty np. w przypadku przeglądarek trybu tekstowego lub takich, w których użytkownik wyłączył te funkcje[2].

Stan implementacji edytuj

Mechanizm pojawił się oryginalnie w zaprezentowanym w 2009 roku przez firmę Google eksperymentalnym protokole SPDY[3][4], który w 2012 stał się podstawą pierwszych wersji HTTP/2[5].

Wydawcy najpopularniejszych przeglądarek wdrożyli push razem z implementacją protokołu HTTP/2 jeszcze w 2015[6]. W najpopularniejszych serwerach www pojawiał się sukcesywnie (Apache 2.4.17 z października 2015 wraz z modułem mod_http2[7], IIS w wersji 2016 TP[8], nginx od wersji 1.13.9 z lutego 2018[9]).

Jednak w listopadzie 2020, motywując to znikomym wykorzystaniem w monitorowanym przez siebie ruchu sieciowym (poprawnie przepchnięte zasoby pojawiły się jedynie w 0,03% połączeń), Google ogłosił zamiar usunięcia standardowego mechanizmu z implementacji protokołu HTTP/2 przeglądarki Chromium, na której bazuje własna przeglądarka Google oraz szereg innych wydawców[10]. Push został wyłączony w wydanej w sierpniu 2022 wersji 106 Google Chrome[11].

Przypisy edytuj

  1. a b RFC 7540 ↓.
  2. Daniel Aleksandersen: Chrome to remove HTTP/2 Push. 2020-11-30. [dostęp 2022-12-04]. (ang.).
  3. Iljitsch van Beijnum: SPDY: Google wants to speed up the web by ditching HTTP. 2009-11-12. [dostęp 2022-12-06]. (ang.).
  4. SPDY: An experimental protocol for a faster web. [dostęp 2022-12-03]. (ang.).
  5. Mark Nottingham: First draft of HTTP/2. HTTP Working Group Mailing List. [dostęp 2012-12-02].
  6. Can I use... HTTP/2 protocol. caniuse.com, lipiec 2022. [dostęp 2022-08-23]. (ang.).
  7. Jim Jagielski: Apache HTTP Server 2.4.17 Released. 2015-10-13. [dostęp 2022-12-03]. (ang.).
  8. Mike Bishop; David So: HTTP/2 on IIS. Microsoft, 2015-09-11. [dostęp 2022-12-04].
  9. Changes with nginx 1.14.2. 2018-12-04. [dostęp 2022-12-03]. (ang.).
  10. Brad Lassey: Intent to Remove: HTTP/2 and gQUIC server push. 2020-11-11. [dostęp 2022-12-04]. (ang.).
  11. Barry Pollard: Removing HTTP/2 Server Push from Chrome. 2022-08-18. [dostęp 2022-12-04]. (ang.).

Linki zewnętrzne edytuj