PHP Encodings

joschilein

Multitalent
ID: 9301
L
5 Mai 2006
1.393
151
Ich habe in letzte Zeit mal gesammelt, welche http_accept_encoding-Werte die Besucher mitsenden und möchte die nun bestmöglich unterstützen, d.h. durch eine entsprechende Funktion komprimieren und den passenden Header ausgeben. Dabei habe ich ein paar Fragen:
  • Was ist eigentlich der Unterschied zwischen gzip und x-gzip? Die können ja scheinbar beide durch gzencode() laufen?!
  • Was ist "identity"?
  • Was ist "sdch"?

Wenn ein Client nichts sendet, oder nur etwas was ich nicht in meiner Positivliste habe, sollte ich ihm vermutlich lieber unkomprimierte Daten senden?! Bei ob_gzhandler() klingt es jedenfalls so, als ob dort auch nur geschaut wird, welchen Header der Client gesendet hat und gibt dann gzip, deflate oder "nichts" zurück.

Meine Positivliste sieht momentan so aus
  • gzip => gzencode()
  • x-gzip => gzencode()
  • deflate => gzdeflate()
  • bzip2 => bzcompress()
  • x-bzip2 => bzcompress()
 
x-gzip ist der content type für mit gzip komprimierte Dateien, bzw. application/x-gzip.
Also ich würde einfach mit gzip komprimieren, wenn möglich und fertig. Da noch auf bz2 zu prüfen, kann das ein Browser? gzip Stufe 1 und gut ist.
 
Ich habe mal testweise mit meinem Client-Header rumgespielt und nun werden die Angaben in der Priorität ihrer Reihenfolge unter der Berücksichtung der Whitelist geliefert. Das Script würde auch q-Angaben (-> ähnlich wie bei http_accept_language, haben manche Clients mitgesendet) verarbeiten (= ignorieren).

Der Firefox scheint aber irgendwie nicht so auf die q-Angaben zu stehen. Bei Zeile 2 zu 3 wird ja gzip geliefert und als x-gzip benannt und ich dachte erst das könnte Probleme bereiten. Aber Zeile 4/5 und 8/9 zeigen ja ziemlich deutlich, dass er die q-Angaben eben selbst nicht ignoriert sondern stur kommasepariert interpretiert und dann eben keine Variante "gzip;q=1" in seinen Innereien findet. Na aber wenn das ein paar Clients können, sollen die damit glücklich werden.
n|Client-Header|Server-Header|Bytes|Lesbarkeit (Firefox)|Bemerkung
1|gzip, deflate|gzip|2.443|OK|
2|x-gzip, gzip, deflate|x-gzip|2.446|OK|
3|x-gzip, deflate|x-gzip|2.442|Chaos|???
4|x-gzip;q=1, gzip, deflate;q=0.5|x-gzip|2.452|OK
5|gzip;q=1, deflate;q=0.5|gzip|2.447|Chaos|???
6|gzip, deflate;q=0.5|gzip|2.447|OK|
7|test|text/html|7.479|OK|
8|test, deflate|deflate|2.425|OK|
9|test, deflate;q=0.5|deflate|2.425|Chaos|
(Die unverhofften Byteunterschiede kommen durch die Debugausgabe des jeweils etwas unterschiedlichen Clientheaders auf der Seite)