Tom: PageSpeed Insights // gzip Komprimierung per PHP

Beitrag lesen

Hello,

Ich probiere das morgen mal aus.
php's komprimierer setzt ja vermutlich einen compression-header. Den koennte der apache dann beruecksichtigen.

Der Header heißt: Content-Encoding: gzip

Wann PHP den setzt, weiß ich nicht. Jedenfalls wird er in der Liste der Headers (headers_list()) noch nicht angezeigt und mittels apache_response_headers() ist er auch noch nicht zu sehen.

Im Output erscheint dann allerdings

mit php's ob_gzhandler:

  
http://testserver.lan/http-headers/get_headers.php  
  
GET /http-headers/get_headers.php HTTP/1.1  
Host: testserver.lan  
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:29.0) Gecko/20100101 Firefox/29.0  
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8  
Accept-Language: de,en-US;q=0.7,en;q=0.3  
Accept-Encoding: gzip, deflate  
Referer: http://testserver.lan/http-headers/  
Cookie: adam=Mann; eve=Frau; snake=b%C3%B6se  
Connection: keep-alive  
Cache-Control: max-age=0  
  
HTTP/1.1 200 OK  
Date: Sun, 29 Jun 2014 09:43:11 GMT  
Server: Apache/2.4.7 (Win32) OpenSSL/0.9.8y PHP/5.4.22  
X-Powered-By: PHP/5.4.22  
Set-Cookie: adam=Mann  
Set-Cookie: eve=Frau  
Set-Cookie: snake=b%C3%B6se  
Content-Encoding: gzip  
Vary: Accept-Encoding  
Content-Length: 871  
Keep-Alive: timeout=5, max=100  
Connection: Keep-Alive  
Content-Type: text/html; Charset=utf-8;  
  

Wenn man nun ob_start('gz_handler'); in PHP weg lässt und stattdessen in die .htaccess die Direktive

  
## .htaccess  
SetOutputFilter DEFLATE  
  

aufnimmt, übernimmt der Apache die Kopression. Voraussetzung dafür ist, dass das mod_deflate geladen ist. Es gibt dann leichte Unterschiede bei der Kompression.

mit mod_deflate:

  
http://testserver.lan/http-headers/get_headers.php  
  
GET /http-headers/get_headers.php HTTP/1.1  
Host: testserver.lan  
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:29.0) Gecko/20100101 Firefox/29.0  
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8  
Accept-Language: de,en-US;q=0.7,en;q=0.3  
Accept-Encoding: gzip, deflate  
Referer: http://testserver.lan/http-headers/  
Cookie: adam=Mann; eve=Frau; snake=b%C3%B6se  
Connection: keep-alive  
Cache-Control: max-age=0  
  
HTTP/1.1 200 OK  
Date: Sun, 29 Jun 2014 09:41:46 GMT  
Server: Apache/2.4.7 (Win32) OpenSSL/0.9.8y PHP/5.4.22  
X-Powered-By: PHP/5.4.22  
Set-Cookie: adam=Mann  
Set-Cookie: eve=Frau  
Set-Cookie: snake=b%C3%B6se  
Vary: Accept-Encoding  
Content-Encoding: gzip  
Content-Length: 861  
Keep-Alive: timeout=5, max=100  
Connection: Keep-Alive  
Content-Type: text/html; Charset=utf-8;  
  

~~~.  
  
Eigentlich hat der Quelltext nur ein Byte unterschied für die Auskommentiereung des ob\_start('ob\_gzhandler'). Das File wird als Payload mitgesendet.  
  
  
Das wichtigste ist wohl, dass es nicht kracht, wenn beide Kompressionen eingeschaltet sind. Der Apache scheint also darauf zu achten, ob bereits eine Kompression vorliegt.  
  
Wie man sieht, benutzt aber auch mod\_deflate die Kompressionsart gzip. Ein anderes Modul habe ich nicht geladen.  
  
Interessant für den Fragesteller dürfte noch sein, dass der unkompromierte Content ca. dreimal so groß war.  
  
ohne Kompression  
~~~http
  
HTTP/1.1 200 OK  
Date: Sun, 29 Jun 2014 09:44:54 GMT  
Server: Apache/2.4.7 (Win32) OpenSSL/0.9.8y PHP/5.4.22  
X-Powered-By: PHP/5.4.22  
Set-Cookie: adam=Mann  
Set-Cookie: eve=Frau  
Set-Cookie: snake=b%C3%B6se  
Content-Length: 2100  
Keep-Alive: timeout=5, max=100  
Connection: Keep-Alive  
Content-Type: text/html; Charset=utf-8;  
  

PHP hat ebenfalls mehrere Module zur Kompression:
* zip
* zlib
* bz2

ob da nun zip oder zlib verantwortlich ist, weiß ich nicht.

Mit ob_start('ob_deflatehandler') gab es bei mir übrigens nur eine Fehlermeldung.

ich bin nur ueber die duerftige Beschreibung im php-manual enttaeuscht. Da stehen 10 Jahre alte UCNs drin, aber keine weiteren Angaben zur Funktionsweise.

Liebe Grüße aus dem schönen Oberharz

Tom vom Berg

Liebe Grüße aus dem schönen Oberharz

Tom vom Berg

--
 ☻_
/▌
/ \ Nur selber lernen macht schlau
Die ultimative Seite für Selbermacher