.htaccess: GZIP nach Accept-Encoding
Der Alexander
- webserver
Hallo,
ich suche nach einer Möglichkeit, in der .htaccess auf einem Apache-Webserver dem Browser GZIP-komprimierte Dateien auszuliefern, sofern der (Browser) das in einem Accept-Encoding angibt.
Also sinngemäß so etwa:
<If Accept-Encoding: gzip> # diese Anweisung für Apache verständlich machen
AddOutputFilter DEFLATE htm
Ich möchte nicht, daß das per PHP in jeder Datei realisiert wird und auch nicht von jeder betroffenen Datei eine GZIP-komprimierte Version anfertigen und auf dem Server ablegen.
Gibt es da eine Möglichkeit?
Grüße
Hallo Alexander,
ich suche nach einer Möglichkeit, in der .htaccess auf einem Apache-Webserver dem Browser GZIP-komprimierte Dateien auszuliefern, sofern der (Browser) das in einem Accept-Encoding angibt.
Also sinngemäß so etwa:<If Accept-Encoding: gzip> # diese Anweisung für Apache verständlich machen
AddOutputFilter DEFLATE htm
Einfach nur: AddOutputFilter DEFLATE ...
Der Deflate-OutputFilter checkt automatisch, ob Accept-Encoding: gzip gesetzt ist. Er kümmert sich auch automatisch um den korrekten Vary-Header. Du musst nichts mehr tun.
Ich möchte nicht, daß das per PHP in jeder Datei realisiert wird und auch nicht von jeder betroffenen Datei eine GZIP-komprimierte Version anfertigen und auf dem Server ablegen.
Gibt es da eine Möglichkeit?
AddOutputFilterByType DEFLATE text/html text/plain
Das sagt, dass wenn Content des Typs text/html (oder text/plain) generiert wird (egal ob statisch oder dynamisch), dann soll der Deflate-Filter genutzt werden.
Viele Grüße,
Christian
Hallo Christian.
Einfach nur: AddOutputFilter DEFLATE ...
Der Deflate-OutputFilter checkt automatisch, ob Accept-Encoding: gzip gesetzt ist. Er kümmert sich auch automatisch um den korrekten Vary-Header. Du musst nichts mehr tun.
Ach so, wenn damit automatisch überprüft wird, ob der Client das komprimierte kann, und nur falls ja, es ihm komprimiert geschickt wird, hat sich das mit einer zusätzlichen Abfrage ja erledigt.
Danke.
Es grüßt
Alexander
Hallo Alexander,
Argh. Mir ist gerade wieder etwas eingefallen, ich hatte doch was bzgl. Output Filter im Hinterkopf:
Wenn man mod_action verwendet dann ist das Verhalten vom Apache bezüglich Output Filter nicht sehr intuitiv (manche würden das auch als Bug bezeichnen), für Details siehe:
http://marc.info/?l=apache-httpd-dev&m=119973112425481&w=2 (Leider habe ich keine Reaktion darauf bekommen...)
Kurz zusammengefasst: Output Filter (egal welcher Art, das hat nichts mit DEFLATE zu tun) bei PHP als CGI/FastCGI funktionieren nicht bzw. nur wenn man sie für den PHP-CGI-Wrapper selbst aktiviert (was vmtl. unerwünscht ist). Bei PHP als Modul tritt das Problem nicht auf.
Das heißt: Wenn's bei Dir nicht funktioniert (bei PHP-Seiten, statische Seiten sind kein Problem), dann kannst Du nicht wirklich etwas dagegen tun (außer es manuell in PHP machen)...
Oder anders gesagt: Mein voriges Posting ist zwar prinzipiell richtig, es gibt aber Spezialfälle, wo OutputFilter überhaupt nicht wie erwartet funktionieren.
Viele Grüße,
Christian
Hallo Christian,
frohes neues Jahr.
Das heißt: Wenn's bei Dir nicht funktioniert (bei PHP-Seiten, statische Seiten sind kein Problem), dann kannst Du nicht wirklich etwas dagegen tun (außer es manuell in PHP machen)...
Ich habe das meiste statisch. Leider funktioniert es trotzdem nicht, es wird immer unkomprimiert verschickt, auch wenn der Browser mitteilt, er könnte Komprimiertes empfangen. Ich denke, die Funktion ist am von mir genutzten Apache abgestellt - und darauf habe ich keinen Einfluß.
Grüße und Dank vom
Alexander
Hallo,
Ich habe das meiste statisch. Leider funktioniert es trotzdem nicht, es wird immer unkomprimiert verschickt, auch wenn der Browser mitteilt, er könnte Komprimiertes empfangen. Ich denke, die Funktion ist am von mir genutzten Apache abgestellt - und darauf habe ich keinen Einfluß.
Ist denn mod_deflate im Apache geladen? Was sagt das Error-Log, falls Du darauf Zugriff haben solltest?
Viele Grüße,
Christian
Hallo.
Ist denn mod_deflate im Apache geladen? Was sagt das Error-Log, falls Du darauf Zugriff haben solltest?
Wie ich nun eruieren konnte, ist das Modul mod_deflate angeblich nicht geladen. So ein Ärger.
Ins Error-Log kann ich leider nicht gucken.
Grüße vom
Alexander
Hallo Alexander,
Wie ich nun eruieren konnte, ist das Modul mod_deflate angeblich nicht geladen. So ein Ärger.
Wenn es Dir nur um statische Seiten geht, Du aber Perl/CGI zur Verfügung hast, kannst Du Dir mal gzip_cnc ansehen. Das ist ein Perl-Script, das genau diese Funktionalität übernimmt - es wurde noch zu Zeiten des Apache 1.x entwickelt für Shared-Hosting-Umgebungen, bei denen mod_gzip (Vorgänger von mod_deflate) nicht zur Verfügung stand. Es sollte m.M.n. auch mit dem Apache 2.x funktionieren, ich hab' das aber nicht ausprobiert.
Das konzept von gzip_cnc ist, dass jede statische Seite nicht vom Apache direkt ausgeliefert wird sondern durch das Perl-Script geleitet wird, das sich dann darum kümmert, die Seite (je nach Browser-Headern) komprimiert oder unkomprimiert auszuliefern.
Viele Grüße,
Christian
Hallo wieder.
Das ist ein Perl-Script
Uff, das klingt aber wirklich aufwendig. Mit Perl/CGI habe ich noch keinerlei Erfahrungen und weiß auch nicht, ob ich das auf dem Server überhaupt nutzen kann. Am liebsten sollte es ohne Perl/CGI sein, aber ich fürchte, das sieht schlecht aus.
Es grüßt
Alexander