2016-07-04 9 views
1

Ich experimentiere mit der Migration zu http/2. Ich habe eine Wordpress-Website eingerichtet und NGINX konfiguriert, um es mit http/2 zu bedienen (mit SSL/TLS).HTTP2 und NGINX - wann würde ich eine Keepalive-Direktive verwenden?

Mein Verständnis von http/2 ist, dass es standardmäßig eine Verbindung verwendet, um eine Reihe von Dateien zu übertragen - anstatt neue Verbindungen zu öffnen und SSL-Handshakes für jede Datei zu wiederholen.

Um einen ähnlichen Effekt für http/1.x zu erzielen, bietet NGINX die Keepalive-Direktive an.

Macht die Verwendung der Keepalive-Anweisung Sinn, wenn Sie ausschließlich http/2 verwenden? Das Überprüfen meiner Konfigurationsdateien mit "nginx -t" meldet keine Fehler, wenn ich sie einfüge. Aber hat es irgendeinen Effekt? Benchmarking zeigte keinen Unterschied.

Antwort

4

Sie missverstehen, wie das funktioniert.

Keep Alive Arbeit zwischen Anfragen.

Wenn Sie eine Webseite herunterladen, lädt sie die HTML-Seite herunter und stellt fest, dass sie weitere 20 Ressourcen benötigt (CSS-Dateien, Javascript-Dateien, Bilder, Schriften ... usw.).

Unter HTTP/1.1 können Sie nur eine dieser Ressourcen gleichzeitig anfordern, so dass der Webbrowser normalerweise weitere 5 Verbindungen (insgesamt 6) startet und 6 dieser 20 Ressourcen anfordert. Dann fordert es die verbleibenden 14 Ressourcen an, wenn diese Verbindungen frei werden. Ja keep-alives Hilfe zwischen diesen Anfragen, aber das ist nicht seine einzige Verwendung, wie wir weiter unten diskutieren werden. Der Aufwand für die Einrichtung dieser Verbindungen ist gering, aber spürbar, und es ist eine Verzögerung, nur 6 Ressourcen dieser 20 gleichzeitig anfordern zu können. Aus diesem Grund ist HTTP/1.1 ineffizient für die heutige Nutzung des Webs, wo eine typische Webseite aus 100 Ressourcen besteht.

Unter HTTP/2 können wir alle 20 Anfragen gleichzeitig auf der gleichen Verbindung abfeuern, so dass es dort einige gute Gewinne gibt. Und ja, technisch profitieren Sie nicht wirklich von Keep-Alive zwischen denen, da die Verbindung immer noch verwendet wird, bis sie alle ankommen - obwohl sie immer noch von einer kleinen Verzögerung zwischen der ersten HTML-Anfrage und den anderen 20 Anrufen profitieren Lade dort wahrscheinlich mehr Anfragen. Entweder, weil Sie auf der Website surfen oder weil Sie mit der Seite interagieren und zusätzliche XHR-API-Anrufe tätigen. Diese werden von Keep-Alives profitieren, egal ob auf HTTP/1.1 oder HTTP/2.

Also HTTP/2 negiert nicht Notwendigkeit für Keep-Alive. Es negiert die Notwendigkeit für mehrere Verbindungen (unter anderem).

Also die Antwort ist immer Keep-Alive zu verwenden, es sei denn, Sie haben einen sehr guten Grund nicht zu. Und welche Art von Benchmarking machen Sie, um zu sagen, dass es keinen Unterschied macht?

+0

Danke, dass Sie auf diese Unterscheidung hingewiesen haben. Das Problem ist, dass die Einstellung "Keep-Alive" beim Testen keinen Unterschied macht (Benchmarking war das falsche Wort, sorry). Wenn 'curl -I --http1.1' mit keep-alive verwendet wird, enthält die Antwort _Connection: keep-alive_. Aber die Verwendung von "curl -I --http2" zeigt keinen solchen Eintrag. – michbona

+2

Unter HTTP/2 ist keep alives der Standard und HTTP/2 verwendet nicht den Verbindungs-Header (siehe Abschnitt 8.1.2.2 der HTTP/2-Spezifikation hier: https://http2.github.io/http2-spec/#). HttpHeaders). –

+0

Wenn in HTTP/2 keep-alives die Standardeinstellung sind, muss ich nichts in der Webserver-Konfiguration einstellen (außer HTTP/2 einschalten)? Oder ist das spezifisch für jeden Webserver? Und wie würde ich herausfinden, ob Keep-Alive "an" oder "aus" ist? – michbona

Verwandte Themen