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