mod_deflate - Optimale Konfiguration für die meisten Browser

7

Ich habe mich gefragt, ob mir hier jemand helfen kann, die optimale Standardkonfiguration für die Verwendung von Mod Deflate mit Apache zu ermitteln. Grundsätzlich empfiehlt mod_deflate die Verwendung der folgenden Konfiguration, um sofort loszulegen:

Komprimieren Sie nur wenige Typen

AddOutputFilterByType DEFLATE text / html text / Klartext / xml http://httpd.apache.org/docs/2.0/mod/mod_deflate.html

Sie können dies jedoch bereits nach dem Lesen des Dokuments für alle Browser anpassen. Darüber hinaus können Sie mod_deflate für alle Arten von MIME-Typen anpassen. Ich habe mich gefragt, ob jemand da draußen mit diesen Einstellungen experimentiert und eine Einstellung gefunden hat, die für alle Browser optimal ist.

Ein weiteres Beispiel, das Apache bietet, aber nicht verwenden, wenn Sie nicht alle Konfigurationsoptionen verstehen:

<Location />
# Insert filter
SetOutputFilter DEFLATE

# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4 gzip-only-text/html

# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip

# MSIE masquerades as Netscape, but it is fine
# BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

# NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48
# the above regex won't work. You can use the following
# workaround to get the desired effect:
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

# Don't compress images
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png)$ no-gzip dont-vary

# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
</Location>

http://httpd.apache.org/docs/2.0/mod/mod_deflate.html

Ich verstehe die meisten Konfigurationseinstellungen und möchte etwas Ähnliches einrichten. Es würde mir nichts ausmachen, die Komprimierung von Bildern und anderen Medien zu vermeiden, die bereits komprimiert sind. Die Details, mit denen ich Probleme habe, sind zu verstehen, wie dies mit all den verschiedenen Browsern da draußen reagiert, Chrome, Firefox, IE, Opera usw. Offensichtlich bin ich nicht mit Netscape 4.X beschäftigt. Ich hoffe, jemand hat dies alles bereits getestet und kann möglicherweise eine gute Einstellung empfehlen, die diese Kriterien erfüllt.

Ich meine, wenn es nur darum geht, die empfohlene Einstellung im Dokument zu verwenden, bin ich damit einverstanden, aber ich wollte es nur überprüfen, um sicherzugehen.

Nur um ein paar zusätzliche Details zu liefern. Wir verwenden Apache als Front für alle unsere Webservices. Zum Beispiel: Zusammenfluss, Git, Gitweb, etc ...

Tomcat und andere Dienste werden über Apache übertragen, sodass wir Konfigurationen für virtuelle Hosts, mod_proxy mit AJP, mod_ssl, haben.

Mein Unternehmen verfügt nicht über ein dediziertes IT-Team, daher muss ich in meiner Freizeit viel davon einrichten. Ich würde mich über jeden Beitrag freuen, den Sie leisten können.

Um also klar zu sagen, was ich frage, was ist die optimale Konfiguration für die Bearbeitung der grundlegenden Inhaltsanforderungen, die Anforderungen von Apache an Mainstream-Browser erfüllen?

Meine Liste der grundlegenden Inhaltstypen bisher:

  • Text / HTML
  • Text / Klartext
  • text / xml
  • text / x-js
  • Text / Javascript
  • Text / CSS
  • application / xml
  • application / xhtml + xml
  • Anwendung / X-Javascript
  • Anwendung / Javascript
  • Anwendung / json

Typen, die offensichtlich nicht komprimiert werden müssen:

  • Bilder - GIF, JPG, PNG
  • Archive - exe, gz, zip, sit, rar
Jason Huntley
quelle
HTML5 Boilerplate hat einige ziemlich gute Sachen . Ich würde mir keine Sorgen um verschiedene Browser machen. Alle (modernen) Browser können mit Komprimierung umgehen. Auch AddOutputFilterByTypeist veraltet.
user123444555621

Antworten:

8

Ich ging voran und recherchierte dieses heraus. Nachdem ich mehrere Tutorials und das Apache-Dokument gelesen hatte, konnte ich etwas Wesentliches zusammenstellen, das anscheinend gut funktioniert. Unter Verwendung der obigen Liste habe ich eine Reihe von Regeln / Deklarativen zusammengestellt, die die Komprimierung mit den Mainstream-Inhaltstypen zu handhaben scheinen:

<Location />
# Insert filter
SetOutputFilter DEFLATE

AddOutputFilterByType DEFLATE text/html text/plain text/xml text/x-js text/javascript text/css 
AddOutputFilterByType DEFLATE application/xml application/xhtml+xml application/x-javascript application/javascript
AddOutputFilterByType DEFLATE application/json

BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

# Don't compress images
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png)$ no-gzip dont-vary

SetEnvIfNoCase Request_URI \
    \.(?:exe|t?gz|zip|bz2|sit|rar)$ \
    no-gzip dont-vary
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary

</Location>

Zum Testen habe ich im Grunde TamperData für Firefox verwendet und die Deflate-Protokollierung für Apache aktiviert:

https://addons.mozilla.org/en-US/firefox/addon/tamper-data/

Fügen Sie für Apache Folgendes hinzu:

# For Testing Purposes
DeflateFilterNote Input instream
DeflateFilterNote Output outstream
DeflateFilterNote Ratio ratio

#LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
CustomLog logs/deflate_log deflate

http://httpd.apache.org/docs/2.0/mod/mod_deflate.html#deflatefilternote

Jason Huntley
quelle
3
Ich glaube nicht, dass ich mir Sorgen um diese alten Browser machen würde, aber ansonsten eine hervorragende Zusammenfassung.
Chris S
1
SetOutputFilter DEFLATEAktiviert die Komprimierung für alles, sodass Ihre AddOutputFilterByTypeAnweisungen nicht erforderlich sind.
user123444555621
Fast wahr ... In meinem Fall werden keine JSON-Daten komprimiert. Dies ist Apache, der als Load Balancer vor einem Tomcat-Cluster verwendet wird.
Philippe