Komprimierte übertragung von webseiten
Monty Bunrs
- webserver
hi
ich bin auf dem gebiet ein totaler noob
ich hab auch keinen eigenen server
allerdings intressiert es mich durchaus meine html-files komprimiert übertragen zu laqssen
was muss ich machen damit ich raus finde ob mein web-server breits die komprimierte übertragung unterstützt?
oder kann ich das auch selbst mittels php/cgi einrichten?
vieleicht kennt auch einer ein paar seiten auf denen man sich(am besten in deutsch) informieren kann
danke im vorraus
Montgomery Burns
ich bin auf dem gebiet ein totaler noob
ich hab auch keinen eigenen server
Für diese Frage: Schon schlecht.
was muss ich machen damit ich raus finde ob mein web-server breits die komprimierte übertragung unterstützt?
Du kannst Dir ein PHP-Skript schreiben:
<html><body>
<?php phpinfo(); ?>
</body></html>
Irgendwo in der Ausgabe wirst Du einen Abschnitt finden, der die Module im Server auflistet. Beim Apache beginnen die (fast) allesamt mit mod_, für die Komprimierung wäre mod_gzip zuständig. Es kommt allerdings eher selten vor, daß ein 08/15-Hoster, der seinen Server nach SuSe/RedHat/Sonstwas-Plug-and-play-Methode einrichtet (oder gar mietet), sowas im Server hat.
oder kann ich das auch selbst mittels php/cgi einrichten?
Jein. Sowas gehört eigentlich in den Server - wenn Du keinen Zugriff auf den Server hast, hast Du dementsprechend auch keine Chance, das vernünftig einzurichten.
Es gibt allerdings eine Perl-Krücke: http://schroepl.net/projekte/gzip_cnc/.
Hast Du statische HTML-Dateien auf Deinem Server liegen, kannst Du diese außerdem auch mit gzip von Hand komprimieren und zumindest dem Apache-Server als Alternative anbieten. Du hättest dann etwa folgendes in Deinen Verzeichnissen:
seite1.html.html
seite1.html.gz
seite2.html.html
seite2.html.gz
seite3.html.html
seite3.html.gz
Jetzt mußt Du dem Server nur noch mitteilen, daß er sich nach Alternativen umschauen soll. Dazu schreibst Du in die jeweilige .htaccess:
options +multiviews
Beim Zugriff auf beispielsweise seite1.html passiert dann folgendes:
1. Server findet keine Datei seite1.html.
2. Server durchsucht das Verzeichnis nach Dateien, die mit seite1.html beginnen.
3. Server findet seite1.html.html sowie seite1.html.gz und stellt fest, daß es sich um eine normale HTML-Datei (.html.html) sowie eine komprimierte HTML-Datei (.html.gz) handelt.
4. Server schaut, ob der Webbrowser Kompression angefordert hat (genauer gesagt überprüft er, welche seiner gefundenen Alternativ-Dateien der Browser akzeptieren würde).
5. Server liefert die kleinere der Alternativ-Dateien (also normalerweise die komprimierte) aus.
Die doppelte Dateiendung .html.html hat lediglich den Sinn, den Server erstmal zu Punkt 1 zu locken, weil diese ganze Prozedur nur dann gestartet wird, wenn der Server keine Datei findet, deren Name exakt der URL entspricht. Anders ausgedrückt: Mittels multiviews liefert der Server nicht sofort einen "Datei nicht gefunden"-Fehler, sondern schaut erstmal, ob's da vielleicht noch was ähnliches gibt - quasi eine erweiterte 404-Fehlerbehandlung.
Du kannst die Dateien alternativ auch seite1.html und seite1.html.gz benennen, mußt dann aber alle deine Verweise in seite1 umbenennen. Sieht auf den ersten Blick vielleicht merkwürdig aus, hat aber einen weiteren Vorteil: Falls Du später mal die Dateien von .html auf .shtml, .php oder sonstwas umstellst, brauchst Du keinerlei Verweise mehr ändern, die bleiben bei "seite1", "seite2" und "seite3" - der Server sucht sich automatisch die richtige.
Mehr Details findest Du in der Apache-Anleitung unter http://httpd.apache.org/docs/content-negotiation.html.
vieleicht kennt auch einer ein paar seiten auf denen man sich(am besten in deutsch) informieren kann
Michael Schröpl (auch hier im Forum) hat sich für mod_gzip zuständig erklärt: http://schroepl.net/projekte/mod_gzip/, das Original findest Du unter http://www.remotecommunications.com/apache/mod_gzip/.
Gruß,
soenk.e
danke
das nenn ich mal ne antwort
allerdings hat die auch noch zusatzfragen aufgeworfen
ich hab das problem das meine seite in php geschrieben ist
gibt es keine php-function die den fertig interpretierten html-code komprimiert?
das einzige was bei mir statisch ist, sind die css und js dateien
kann ich die auch von hand komprimieren?
Monty Burns
ich hab das problem das meine seite in php geschrieben ist
gibt es keine php-function die den fertig interpretierten html-code komprimiert?
Es gibt zwei Möglichkeiten, PHP zur Ausgabe komprimierter Daten zu bringen, einmal ein Ding namens ob_gzhandler (ob wie "output buffer") und einmal eine Einstellung zlib.output_compression, die sich auch in der .htaccess setzen lässt. Ich kann jetzt momentan nicht nachschauen, ob die Namen richtig sind und vor allen Dingen welche von den beiden so mies implementiert wurde, daß selbst in der PHP-Anleitung vor der Benutzung gewarnt wird.
Ich möchte aber mal behaupten, daß Du mit
phpflag zlib.output_compression on
in der .htaccess richtig liegst. Schau einfach mal in die Anleitung unter http://php.net, das Kapitel Konfiguration und die Suchfunktion oben rechts in der Ecke helfen Dir sicher weiter.
Ein prophylaktischer Hinweis: Bei eingeschalteter PHP-Komprimierung keine PHP-Seiten in SSI-Seiten importieren (z.B. per <!--#include virtual="kopf.php" -->) oder ähnliche Aktionen veranstalten, bei denen intern im Webserver eine HTTP-Anfrage simuliert wird.
PHP kann nicht zwischen solchen internen Anfragen (innerhalb des Servers) und solchen, die von außen kommen (von einem Browser), unterscheiden. Das Ergebnis ist dann Zeichensalat auf der gewünschten Seite, weil die komprimierten Daten als Text angezeigt werden - nicht schlimm, aber auch nicht lesbar :) Es war gerade vor ein paar Tagen jemand mit diesem Problem hier im Forum, der in einer SSI-Seite ein PHP-Board darstellen wollte.
das einzige was bei mir statisch ist, sind die css und js dateien
kann ich die auch von hand komprimieren?
Ja, das geht mit allen Dateien/Daten. Allerdings kann es mit einigen sehr alten Browsern Schwierigkeiten geben, die zwar Komprimierung anfordern, sie aber eigentlich nur bei HTML-Dateien unterstützen und dementsprechend bei komprimierten Javascript- oder CSS-Sachen völlig ratlos aus der Wäsche schauen (aber AFAIK zumindest nicht abstürzen).
Gruß,
soenk.e
Hi,
Ja, das geht mit allen Dateien/Daten.
Allerdings kann es mit einigen sehr alten Browsern
Schwierigkeiten geben, die zwar Komprimierung
anfordern, sie aber eigentlich nur bei HTML-Dateien
unterstützen und dementsprechend bei komprimierten
Javascript- oder CSS-Sachen völlig ratlos aus der
Wäsche schauen (aber AFAIK zumindest nicht abstürzen).
genau. Netscape 4 und komprimiertes JavaScript bzw. CSS, das ist eine ziemlich traurige Kombination.
Allerdings würde eine serverseitige Einbindung solcher Seiten das Problem umgehen - oder eine serverseitige Erkennung dieses Browsers. Oder beides. Oder ...
Worauf man beim Komprimieren noch achten sollte:
Nicht die auf dem Weg befindlichen Proxies belügen.
Also brav einen "Vary: Accept-Encoding"-Header (mindestens) mit senden. Sonst werden 98% aller Browser des WWW möglicherweise ziemlich unglücklich - insbesondere Mozilla und M$IE ...
(http://www.schroepl.net/projekte/mod_gzip/cache.htm)
Viele Grüße
Michael
P.S.: Wurde schon geposted, daß Squid 2.5 released ist und tatsächlich negotiated content cachen kann?