Gzip komprimierte Webseiten senden
Scooter
- php
Hi,
ich beschäftige mich gerade damit, wie ich meine Webseiten durch GZip-Komprimierung schneller senden kann.
Dazu habe ich mir http://www.php.net/manual/de/function.gzcompress.php inkl. der Comments durch gelesen. Auch schon was getestet. Aber so kleine Sachen weiß ich immer noch nicht:
1. Soll ich gzcompress oder gzencode benutzen? Ich möchte nur die Seiten komprimiert schicken, und der Browser soll sie wieder decodieren. Bei den Comments standen unterschiedliche Dinge.
2. Hat einer Erfahrung mit der dort genannten Prüfsumme mittels crc32() ?? Wird sie von einigen Linux browsern benötigt oder nicht??
3. Was hat es mit dem String "\x1f\x8b\x08\x00\x00\x00\x00\x00" auf sich???
4. Weiß vielleicht auch jemand wie ich Bilder oder so komprimiert senden kann?? Das wäre ja interessanter als nur HTML-Code.
Gruß
Scooter
Moin Moin !
http://schroepl.net/projekte/gzip_cnc/
ich beschäftige mich gerade damit, wie ich meine Webseiten durch GZip-Komprimierung schneller senden kann.
Das kann nicht jeder Browser verdauen.
Dazu habe ich mir http://www.php.net/manual/de/function.gzcompress.php inkl. der Comments durch gelesen. Auch schon was getestet. Aber so kleine Sachen weiß ich immer noch nicht:
- Soll ich gzcompress oder gzencode benutzen? Ich möchte nur die Seiten komprimiert schicken, und der Browser soll sie wieder decodieren. Bei den Comments standen unterschiedliche Dinge.
Und auf der von dir verlinkten Seite:
Anmerkung: This is not the same as gzip compression, which includes some header data. See gzencode() for gzip compression.
gzcompress liefert nur die komprimierten Daten, gzencode auch die notwendigen GZIP-Header.
- Hat einer Erfahrung mit der dort genannten Prüfsumme mittels crc32() ?? Wird sie von einigen Linux browsern benötigt oder nicht??
Die Prüfsumme sollte im Header stehen, schätze ich. Unabhängig vom Browser.
- Was hat es mit dem String "\x1f\x8b\x08\x00\x00\x00\x00\x00" auf sich???
8 Bytes Binärdaten: 31, 139, 8, 0, 0, 0, 0, 0 dezimal.
Ohne Zusammenhang absolut nutzlos.
- Weiß vielleicht auch jemand wie ich Bilder oder so komprimiert senden kann?? Das wäre ja interessanter als nur HTML-Code.
Genauso wie HTML-Daten. Bild laden, Bild durch gzencode jagen, Bild mit passenden HTTP-Headern senden.
Alexander
Hallo Alexander,
- Weiß vielleicht auch jemand wie ich Bilder oder so komprimiert senden kann?? Das wäre ja interessanter als nur HTML-Code.
Genauso wie HTML-Daten. Bild laden, Bild durch gzencode jagen, Bild mit passenden HTTP-Headern senden.
Kannst du das mal etwas genauer sagen? Also, Ich habe ja Bilder in einer Webseite eingebunden.
Gruß, Andreas
Moin Moin !
- Weiß vielleicht auch jemand wie ich Bilder oder so komprimiert senden kann?? Das wäre ja interessanter als nur HTML-Code.
Genauso wie HTML-Daten. Bild laden, Bild durch gzencode jagen, Bild mit passenden HTTP-Headern senden.
Kannst du das mal etwas genauer sagen? Also, Ich habe ja Bilder in einer Webseite eingebunden.
1. PHP-Script schreiben, das eine Bild-Datei als String öffnet, durch gzencode schickt und anschließend mit passenden HTTP-Headern ausgibt. Beispiele gibt's in den Kommentaren zur PHP-Doku.
2. Ggf. URLs so anpassen, daß die Bilder durch gzip laufen:
<img src="/images/bild.gif" ...> wird zu <img src="/php/gzipcompress.php?path=/images/bild.gif"> oder schlicht <img src="/php/gzipcompress.php/images/bild.gif">. Die erste Variante ermittelt die Bilddatei aus dem URL-Parameter "path", die zweite über die Environment-Variable PATH_INFO und/oder PATH_TRANSLATED.
Gefährliche Falle: Wenn Du "path" / PATH_INFO / PATH_TRANSLATED nicht sehr scharf und sehr restriktiv überprüfst, kann man u.u. den gesamten für PHP sichtbaren Server (bei einem Nicht-CHROOT-Webserver also wirklich die gesamte Maschine bis auf wenige nur für root lesbare Dateien) über das WWW auslesen.
PATH_TRANSLATED, kombiniert mit einer Prüfung auf "endet mit .gif oder .jpeg", sollte einige Angriffsmöglichkeiten verhindern.
../../../.. ist nur eine von vielen Fallen.
Lies bitte die GZIP_CNC-Webseite (http://schroepl.net/projekte/gzip_cnc/). Die Warnung dort vor Versionen vor 1.11 hat ihre Gründe, den GZIP_CNC hat in den alten Versionen exakt dieses Problem - es lieferte brav sämtliche CGI-Scripte in Textform aus, damit man sie in aller Ruhe auf weitere Angriffspunkte untersuchen kann. Siehe auch http://schroepl.net/projekte/gzip_cnc/security.htm.
Alexander
Hallo Scooter,
ich beschäftige mich gerade damit, wie ich meine Webseiten durch GZip-Komprimierung schneller senden kann.
Warum dann nicht ob_start ("ob_gzhandler"); ganz am Anfang des Scripts? Das nimmt Dir laut Manual die ganze Arbeit ab. Getestet habe ich es selbst jedoch noch nie)
Viele Grüße,
Christian
Hi,
Warum dann nicht ob_start ("ob_gzhandler"); ganz am Anfang des Scripts? Das nimmt Dir laut Manual die ganze Arbeit ab. Getestet habe ich es selbst jedoch noch nie)
Ja, habe ich auch gesehen. Allerdings wüßte ich da nicht, wie ich z.B. den Komprimierungslevel angeben kann. Und ich wollte auch so was schönes machen, wo man sieht wie groß die komprimierte und unkomprimierte datei ist.
das habe ich ja auch alles schon gemacht.
Weißt du eigentlich was der unterschied zwischen gzip und x-gzip ist??
Wenn ein Browser (nur) x-gzip versteht, kommt er dann auch mit einem gzip-header zurecht?
Gruß
Scooter
Hallo Christian,
Warum dann nicht ob_start ("ob_gzhandler"); ganz am Anfang des Scripts? Das nimmt Dir laut Manual die ganze Arbeit ab. Getestet habe ich es selbst jedoch noch nie)
Ich habe das gestern erstmals getestet. Ging ganz einfach. Ich weiß allerdings nicht, ob das nun auch für Browser funktioniert, die es nicht können, also daß es dort automatisch unkomprimiert verschickt wird. Übrigens: aus 19.5 kb sind 7.5 kb geworden - ist doch ok.
Gruß, Andreas
Hi,
Ich weiß allerdings nicht, ob das nun auch für Browser funktioniert, die es nicht können, also daß es dort automatisch unkomprimiert verschickt wird.
es wird nur komprimiert, wenn der Browser dies auch akzeptiert (Accept-Encoding Header). Die Verwendung von ob_gzhandler ist also einfach und sicher.
jan