Nginx verwendet den Gzip-Algorithmus zum Komprimieren von Nachrichten

Nginx verwendet den Gzip-Algorithmus zum Komprimieren von Nachrichten

Was ist HTTP-Komprimierung

Manchmal werden relativ große Nachrichtendaten zwischen dem Client und dem Server übertragen, was viel Netzwerkbandbreite und Zeit in Anspruch nimmt. Um Bandbreite zu sparen und die Antwortgeschwindigkeit der Nachricht zu beschleunigen, können die zu übertragenden Nachrichtendaten vor der Übertragung komprimiert werden.

HTTP unterstützt mehrere Nachrichtenkomprimierungsalgorithmen. Das Folgende ist ein allgemeiner Anforderungsheader. Aus dem Feld Accept-Encoding können wir ersehen, dass es die Komprimierungsalgorithmen gzip, deflate und br unterstützt. In diesem Artikel konzentrieren wir uns auf die Verwendung des Gzip-Algorithmus zum Komprimieren von Nachrichten, beispielsweise Gzip zum Komprimieren von HTML-, Javascript- und CSS-Dateien. Nach der Komprimierung kann die über das Netzwerk übertragene Datenmenge erheblich reduziert und die Geschwindigkeit erhöht werden, mit der Benutzer Webseiten anzeigen.

Akzeptieren: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Akzeptierte Kodierung: gzip, deflate, br
Akzeptierte Sprache: zh-CN,zh;q=0.9
Cache-Steuerung: max-age=0
Verbindung: Keep-Alive
Host: localhost:8000
If-Modified-Since: Dienstag, 21. April 2020, 14:09:01 GMT
Wenn keine Übereinstimmung: "5e9efe7d-264"
Upgrade-Unsichere-Anfragen: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, wie Gecko) Chrome/71.0.3578.98 Safari/537.36

Jede Technologie hat zwei Seiten. Obwohl HTTP-Komprimierung die Bandbreitennutzung reduzieren und die Reaktionsgeschwindigkeit erhöhen kann, beansprucht sie einige Rechenressourcen auf dem Client oder Server, da sie zusätzliche Komprimierungs- und Dekomprimierungsprozesse erfordert.

Leser, die mit HTTP vertraut sind, wissen, dass HTTP-Nachrichtentexte codiert und verschlüsselt werden können. Tatsächlich ist die HTTP-Komprimierung eine spezielle Kodierungsmethode. Durch die Verwendung dieser Kodierungsmethode kann die Nachrichtengröße erheblich reduziert werden, und durch die Verwendung der entsprechenden Lösungsmethode kann die ursprüngliche Nachricht wiederhergestellt werden. (Wir können sehen, dass das Wesen der Komprimierungstechnologie eigentlich eine Art Kodierungsmethode ist.)

Anwendungsszenarien für HTTP-Komprimierung

Aus der obigen Einführung zur HTTP-Komprimierung können wir ersehen, dass es sich bei dieser Technologie um eine Optimierungstechnologie handelt, die häufig verwendet wird, um die vom Server zurückgegebenen Nachrichten zu komprimieren, um Bandbreite zu sparen und die Antwort zu beschleunigen.

Im Folgenden finden Sie eine kurze Einführung in die Verwendung der Gzip-Komprimierung in HTTP.

  • Der Browser sendet eine HTTP-Anfrage an den Webserver und die Anfrage enthält Accept-Encoding: gzip, deflate, br. (teilen Sie dem Server mit, dass der Browser GZIP-Komprimierung unterstützt)
  • Nach Erhalt der Anfrage generiert der Webserver zunächst die ursprüngliche Antwort, die den ursprünglichen Inhaltstyp und die ursprüngliche Inhaltslänge enthält.
  • Der Webserver kodiert die Antwort mit Gzip. Nach der Kodierung enthält der Header Content-Type und Content-Length (komprimierte Größe) und Content-Encoding: gzip wird hinzugefügt. Anschließend wird die Antwort an den Browser gesendet.
  • Nach Erhalt der Antwort dekodiert der Browser die Antwort gemäß Content-Encoding:gzip. Nach Erhalt der ursprünglichen Antwort wird die Webseite angezeigt.

Der Client kann auch komprimierte Daten an den Server senden und die angeforderten Daten über Code dekomprimieren. Zur Standardisierung sollte der Anforderung auch Content-Encoding:gzip hinzugefügt werden.

Implementieren der HTTP-Komprimierung mit Nginx

Nginx unterstützt HTTP-Gzip-Komprimierung. Hier erfahren Sie, wie Sie Nginx anpassen, um die Antwortnachricht zu komprimieren.

Nginx unterstützt die Gzip-Funktion über die Module ngx_http_gzip_module, ngx_http_gzip_static_module und ngx_http_gunzip_module. Im Allgemeinen kompiliert Nginx diese Module standardmäßig. Sie können den Befehl nginx -V verwenden, um zu sehen, ob Ihr installiertes Nginx diese Module enthält.

Gzip-bezogene Anweisungen können im HTTP-Block, Server-Block oder Standortblock der Konfigurationsdatei stehen.

Modul ngx_http_gzip_module

Das Modul ngx_http_gzip_module ist hauptsächlich für das Aktivieren und Einstellen der Gzip-Funktion und das Durchführen einer Online-Echtzeitkomprimierung der Antwortdaten verantwortlich. Dieses Modul enthält die folgenden Hauptanweisungen.

# Aktivieren oder deaktivieren Sie die Gzip-Funktion. Standardmäßig ist dieser Befehl deaktiviert, was bedeutet, dass die Gzip-Funktion nicht aktiviert ist. Nur wenn diese Direktive auf on gesetzt ist, sind andere Direktiveneinstellungen wirksam gzip on | off

# Legen Sie die Größe des Cachespeichers fest, der von Gzip-komprimierten Dateien verwendet wird. # Der Standardwert ist: gzip_buffers 32 4k|16 8k
gzip_buffers Zahlengröße;

# Mit diesem Befehl wird die Gzip-Komprimierungsstufe eingestellt, einschließlich Stufe 1 bis Stufe 9.
# Stufe 1 bedeutet die niedrigste Komprimierungsstufe und die höchste Komprimierungseffizienz; Stufe 9 bedeutet die höchste Komprimierungsstufe, die niedrigste Komprimierungseffizienz und den längsten Zeitaufwand.
# Standard ist 1
gzip_comp_level-Ebene

# Für Anfragen, die von verschiedenen Clienttypen initiiert werden, kann die Gzip-Funktion selektiv aktiviert oder deaktiviert werden.
#Unterstützt reguläre Ausdrücke, wobei der reguläre Ausdruck basierend auf dem Browser-Flag des Clients (User-Agent, UA) festgelegt wird.
gzip_disable regulärer Ausdruck ...;

# Diese Einstellung verwendet einen regulären Ausdruck, der mit allen Browsern übereinstimmt, die MSIE 4, MSIE 5 und MSIE6 in der UC-Zeichenfolge enthalten.
# Beim Antworten auf Anfragen dieser Browser führt der Nginx-Server keine Gzip-Komprimierung durch.
gzip_disable MSIE [4-6]\.;

# Einige ältere Browser oder HTTP-Clients unterstützen die Gzip-Selbstdekomprimierung möglicherweise nicht, sodass Benutzer manchmal verstümmelte Zeichen sehen. Daher muss die Gzip-Funktion für verschiedene HTTP-Protokollversionen selektiv aktiviert oder deaktiviert werden. Mit dieser Anweisung wird die Mindestversion des HTTP-Protokolls zum Aktivieren der Gzip-Funktion festgelegt.
# Die Standardeinstellung ist Version 1.1, d. h. die Gzip-Funktion wird nur dann zum Komprimieren der Antwortausgabedaten verwendet, wenn der Client das HTTP-Protokoll Version 1.1 oder höher verwendet.
# Derzeit unterstützen die meisten Browser die Selbstdekomprimierung von Gzip, daher ist der Standardwert im Allgemeinen akzeptabel.
zip_http_version 1.0 | 1.1;

# Diese Anweisung legt die Anzahl der Bytes der Seite fest. Die Gzip-Funktion wird nur aktiviert, wenn die Größe der Antwortseite diesen Wert überschreitet.
# Es wird empfohlen, gzip_min_length auf 1024 zu setzen;
gzip_min_length Länge;

# Wird verwendet, um festzulegen, ob der Nginx-Server eine Gzip-Komprimierung für die vom Backend-Server zurückgegebenen Ergebnisse durchführt;
# Im Allgemeinen wird das Backend als RestAPI-Schnittstelle verwendet und die zurückgegebene Datenmenge ist nicht zu groß, daher wird eine Komprimierung nicht empfohlen. # Wenn Sie die vom Backend zurückgegebenen Daten wirklich komprimieren müssen, können Sie den Inhalt dieses Abschnitts überprüfen: gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;

# Legen Sie den MIME-Typ fest. Der festgelegte Typ wird komprimiert. Der Standardwert ist: text/html
# Diese Variable kann auch auf „*“ gesetzt werden, was Gzip-Komprimierung von Seitendaten aller MIME-Typen bedeutet. # Im Allgemeinen kann sie auf Folgendes gesetzt werden: gzip_types text/plain application/javascript text/css text/xml
gzip_types MIME-Typ ...;

# Das Einschalten bewirkt, dass Accept-Encoding: gzip zum Antwortheader hinzugefügt wird.
gzip_vary an | aus;

Modul ngx_http_gzip_static_module

Das Modul ngx_http_gzip_static_module ist hauptsächlich für die Suche und das Senden von durch die Gzip-Funktion vorkomprimierten Daten verantwortlich. Diese Dateien werden auf dem Server mit der Endung „.gz“ gespeichert. Wenn die vom Client angeforderten Daten zuvor komprimiert wurden und der Client-Browser die Gzip-Komprimierung unterstützt, werden die komprimierten Daten direkt zurückgegeben.

Der Hauptunterschied zwischen diesem Modul und dem Modul ngx_http_gzip_module besteht darin, dass dieses Modul statische Komprimierung verwendet und das Header-Feld Content-Length in den HTTP-Antwortheader einfügt, um die Länge des Nachrichtentexts anzugeben. Es wird verwendet, wenn der Server die Länge der Antwortdaten bestimmen kann; während letzteres standardmäßig Chunked-codierte dynamische Komprimierung verwendet. Es eignet sich hauptsächlich für Situationen, in denen der Server die Länge der Antwortdaten nicht bestimmen kann, z. B. beim Herunterladen großer Dateien, und die Datenlänge in Echtzeit generiert werden muss.

Die Verwendung der Anweisungen dieses Moduls ähnelt der des Moduls ngx_http_gzip_static_module. Daher werden wir hier nicht ins Detail gehen. Sie können sich auf die offizielle Dokumentation beziehen

Dieses Modul ist ein optionales HTTP-Modul für den Nginx-Server. Wenn Sie es verwenden möchten, müssen Sie bei der Konfiguration des Nginx-Programms die Direktive --with-http_gzip_static_module hinzufügen.

Modul ngx_http_gunzip_module

Der Nginx-Server unterstützt die Gzip-Komprimierung des Antwortausgabedatenstroms. Damit der Client-Browser Gzip-komprimierte Daten dekomprimieren und verarbeiten kann, muss er in der Lage sein. Wenn der Client selbst diese Funktion jedoch nicht unterstützt, muss der Nginx-Server die Daten vor dem Senden dekomprimieren. Diese komprimierten Daten können aus der Komprimierung des Backend-Servers oder der Vorkomprimierung des Nginx-Servers stammen. Das Modul ngx_http_gunzip_module wird zum Dekomprimieren komprimierter Daten für Client-Browser verwendet, die die Verarbeitung komprimierter Gzip-Daten nicht unterstützen.

Ebenso werden die Anweisungen zur Verwendung dieses Moduls nicht im Detail erweitert. Sie können sich auf die offizielle Dokumentation beziehen

Moderne Browser unterstützen im Allgemeinen die Komprimierung, sodass dieses Modul seltener verwendet wird.

Konfigurationsbeispiel

gzip an;
gzip_min_länge 1000;
gzip_proxied, abgelaufen, kein Cache, kein Store, private Authentifizierung;
gzip_types Text/einfache Anwendung/XML;

Um dem Nginx-Server die globale Anwendung der Gzip-Komprimierungsfunktion zu ermöglichen, können Sie die Gzip-Konfiguration in den globalen HTTP-Block einfügen. Wenn wir jeden virtuellen Host anders behandeln möchten, können wir
Fügen Sie die entsprechenden Gzip-Konfigurationsanweisungen in den Block ein.

Mehr lesen

Nicht alle im Alltag entwickelten Anwendungen verwenden Nginx. Sehen wir uns an, wie andere Webserver die Unterstützung für HTTP-Komprimierung aktivieren können.

1. Aktivieren Sie die Komprimierung für Tomcat, das in Spring Boot eingebettet ist

Tomcat unterstützt als Servet-Container + HTTP-Server auch GZIP-Komprimierung. Wenn wir den herkömmlichen Tomcat verwenden, müssen wir nur die HTTP-Komprimierung in der server.xml-Konfiguration aktivieren.
In der eingebetteten Version muss es über Code konfiguriert werden. Der integrierte Tomcat von Spring-Boot ist die eingebettete Version. Einige Standardkonfigurationen von Tomcat wurden über den integrierten Autokonfigurationsmechanismus vorgenommen, aber Spring-Boot bietet keinen Eintrag für einige ungewöhnliche/erweiterte Konfigurationen.

Aufgrund der Eigenschaften von Spring Beans können Sie jedoch die standardmäßig zusammengestellten Beans, einschließlich Tomcat-bezogener Konfigurationen, überschreiben. Verwenden Sie die TomcatConnectorCustomizer-Schnittstelle, um die Komprimierungskonfiguration zu aktivieren.

öffentliche Klasse ConnC1 implementiert TomcatConnectorCustomizer {

 @Überschreiben
 öffentliche Leere anpassen(Connector Connector) {
  ProtokollHandler ProtokollHandler = Connector.getProtocolHandler();
  if (protocolHandler-Instanz von Http11NioProtocol) {
   Http11NioProtocol http11NioProtocol = (Http11NioProtocol)protokollHandler;
   http11NioProtocol.setCompression("on");//standardmäßig aus
   http11NioProtocol.setCompressibleMimeType();
   http11NioProtocol.setCompressionMinSize(2048);//Standard 2048(B)
   http11NioProtocol.setMaxKeepAliveRequests(1);//Standard 200
  }
 }
}

In Bezug auf die Unterstützung von Tomcat für HTTP-Komprimierung können Sie in der CompressionConfig-Klasse von Tomcat nach Hinweisen suchen.

Wenn Sie lediglich die Komprimierungsunterstützung aktivieren möchten, müssen Sie in Spring Boot lediglich die folgende Konfiguration vornehmen:

Server:
 Kompression:
 aktiviert: true
 Mindestantwortgröße: 1024
 MIME-Typen:
  Anwendung/Json

Zusammenfassen

Dies ist das Ende dieses Artikels über die Gzip-Funktion von Nginx. Weitere Informationen zur Gzip-Funktion von Nginx finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der Aktivierungs- und Konfigurationsanweisungen für das Nginx Gzip-Modul
  • So aktivieren Sie die GZIP-Komprimierungsfunktion auf der Serverseite (Apache, IIS, Nginx)
  • Führen Sie die Schritte zum Aktivieren der GZIP-Komprimierung in Nginx aus.
  • Informationen zur Nginx-GZIP-Konfiguration
  • Zusammenfassung zur Verwendung des Nginx-Befehls gzip

<<:  Detaillierte Erklärung der Kartenüberlagerung in OpenLayers6

>>:  mysql ist keine interne Befehlsfehlerlösung

Artikel empfehlen

mySql SQL-Abfrageoperation für statistische Mengen

Ich werde nicht viel Unsinn erzählen, schauen wir...

Vue: Zwei Komponenten auf gleicher Ebene erreichen eine Wertübertragung

Vue-Komponenten sind verbunden, daher ist es unve...

Detaillierte Hinweise zu React für Einsteiger

Inhaltsverzeichnis 1. Grundlegendes Verständnis v...

InnerHTML verstehen

<br />Verwandte Artikel: innerHTML HTML DOM ...

Windows 10 ist zu schwierig zu verwenden. Wie passen Sie Ihr Ubuntu an?

Autor | Herausgeber Awen | Produziert von Tu Min ...

React realisiert den gesamten Prozess des Seitenwasserzeicheneffekts

Inhaltsverzeichnis Vorwort 1. Anwendungsbeispiele...

Erläuterung der Schritte für Tomcat zur Unterstützung des https-Zugriffs

So ermöglichen Sie Tomcat die Unterstützung des h...

So verwenden Sie Nginx zum Simulieren der Canary-Freigabe

Dieser Artikel stellt die Blue-Green-Bereitstellu...

Das Prinzip und die Implementierung des JS-Drag-Effekts

Die Drag-Funktion wird hauptsächlich verwendet, u...

So begrenzen Sie die Anzahl gleichzeitiger Verbindungsanforderungen in Nginx

Einführung Das Modul, das die Anzahl gleichzeitig...

Warum wird in React nicht empfohlen, einen Index als Schlüssel zu verwenden?

1. Vergleichen Sie den alten virtuellen DOM mit d...

Ein kurzer Vortrag über die halbsynchrone MySQL-Replikation

Einführung MySQL erreicht eine hohe Verfügbarkeit...