Blog

HTTP/2 Server-Push

Arnout Engelen

Aktualisiert Oktober 22, 2025
4 Minuten

Der HTTP/2-Standard wurde im Mai 2015 fertiggestellt. Die meisten großen Browser unterstützen ihn, und Google nutzt ihn intensiv. HTTP/2 lässt die grundlegenden Konzepte von Anfragen, Antworten und Headern intakt. Die Änderungen betreffen hauptsächlich die Transportebene und verbessern die Leistung von parallelen Anfragen - mit nur wenigen Änderungen an Ihrer Anwendung. Die go HTTP/2 'gophertiles' Demo demonstriert diesen Effekt sehr schön.Ein neues Konzept in HTTP/2 ist Server Push, das es dem Server ermöglicht, spekulativ mit dem Senden von Ressourcen an den Client zu beginnen. Dies kann die anfänglichen Ladezeiten einer Seite verkürzen: Der Browser muss die HTML-Seite nicht parsen und herausfinden, welche anderen Ressourcen geladen werden sollen, sondern der Server kann sofort damit beginnen, diese zu senden. Dieser Artikel zeigt, wie Server Push die Ladezeit der 'gophertiles' beeinflusst.

HTTP/2 in aller Kürze

Das Hauptmerkmal von HTTP/2 ist, dass alle Anfragen an einen Server über eine TCP-Verbindung gesendet werden und die Antworten parallel über diese Verbindung erfolgen können. Die Verwendung von nur einer Verbindung reduziert den durch TCP- und TLS-Handshakes verursachten Overhead. Die Möglichkeit, Antworten parallel zu senden, ist eine Verbesserung gegenüber HTTP/1.1 Pipelining, bei dem Anfragen nur sequentiell bedient werden können. Da alle Anfragen über eine Verbindung gesendet werden, gibt es außerdem einen Mechanismus zur Header-Komprimierung, der die benötigte Bandbreite für Header reduziert, die zuvor für jede Anfrage wiederholt werden mussten.

Server-Push

Server Push ermöglicht es dem Server, im Voraus ein "Anfrageversprechen" und eine dazugehörige Antwort an den Client zu senden. Der offensichtlichste Anwendungsfall für diese Technologie ist das Senden von Ressourcen wie Bildern, CSS und JavaScript zusammen mit der Seite, die sie enthält. Traditionell müsste der Browser zunächst den HTML-Code abrufen, ihn analysieren und dann weitere Anfragen für andere Ressourcen stellen. Da der Server ziemlich genau vorhersagen kann, welche Ressourcen ein Client benötigt, muss er mit Server Push nicht auf diese Anfragen warten und kann sofort mit dem Senden der Ressourcen beginnen. Natürlich möchten Sie manchmal wirklich nur den HTML-Code abrufen und nicht die dazugehörigen Ressourcen. Es gibt 2 Möglichkeiten, dies zu erreichen: Der Client kann angeben, dass er überhaupt keine gepushten Ressourcen erhalten möchte, oder er kann einen einzelnen Push abbrechen, nachdem er das Push-Versprechen erhalten hat. Im letzteren Fall kann der Client allerdings nicht verhindern, dass der Browser den Push initiiert, so dass möglicherweise etwas Bandbreite verschwendet wurde. Dies macht die Entscheidung, ob Server-Push für Ressourcen verwendet werden soll, die der Browser möglicherweise bereits im Cache gespeichert hat, sehr schwierig.

Demo

Um zu zeigen, welche Auswirkungen HTTP/2 Server Push haben kann, habe ich die gophertiles-Demo erweitert, um das Verhalten mit und ohne Server Push testen zu können, das auf einem alten Raspberry Pi gehostet wird. Sowohl die Latenz beim Laden des HTML als auch die Latenz beim Laden der einzelnen Kacheln ist nun künstlich erhöht. Wenn Sie die Seite ohne Server Push mit einer künstlichen Latenz von 1000ms besuchen, werden Sie feststellen, dass das Laden des HTML mindestens eine Sekunde dauert und das parallele Laden aller Bilder noch einmal mindestens eine Sekunde - das Rendern der gesamten Seite dauert also weit über 2 Sekunden. Wenn Server Push aktiviert ist, werden Sie sehen, dass die Bilder nach dem Laden des DOM fast sofort da sind, weil sie bereits gepusht wurden. Es ist jedoch nicht alles Gold, was glänzt: Wie Sie beim Experimentieren feststellen werden (insbesondere bei niedrigeren künstlichen Latenzen), reduziert Server Push zwar ziemlich zuverlässig die gesamte Ladezeit, erhöht aber manchmal die Zeit, bis der DOM-Inhalt geladen ist. Das ist zwar sinnvoll (der Browser muss Frames verarbeiten, die sich auf die von Server Push geladenen Ressourcen beziehen), könnte sich aber auf die wahrgenommene Leistung Ihrer Seite auswirken: So könnte sich zum Beispiel die Ausführung von in Ihre Website eingebettetem JavaScript-Code verzögern. HTTP/2 bietet Ihnen Tools, mit denen Sie dies abstimmen können, z. B. Stream Priorities, aber dies muss möglicherweise sorgfältig abgestimmt werden und wird von der von Ihnen gewählten http2-Bibliothek unterstützt.

Schlussfolgerungen

HTTP/2 ist heute verfügbar und kann die wahrgenommene Leistung erheblich verbessern - selbst mit nur wenigen Änderungen in Ihrer Anwendung. Server Push ermöglicht es Ihnen möglicherweise, die Ladezeiten Ihrer Seiten noch weiter zu verbessern, erfordert aber eine sorgfältige Analyse und Abstimmung - andernfalls könnte es sich sogar negativ auswirken.

Verfasst von

Arnout Engelen

Contact

Let’s discuss how we can support your journey.