Wie ist der aktuelle Stand der Dinge, wenn es darum geht, ob dies zu tun ist?
Transfer-Encoding: gzip
oder ein
Content-Encoding: gzip
Wenn ich Clients mit z. B. begrenzter Bandbreite erlauben möchte, ihre Bereitschaft zu signalisieren, eine komprimierte Antwort zu akzeptieren, und der Server das letzte Wort darüber hat, ob er komprimiert oder nicht .
Letzteres ist das, was zB Apaches mod_deflate und IIS tun, wenn Sie es für die Komprimierung sorgen lassen. Abhängig von der Größe des zu komprimierenden Inhalts wird dies zusätzlich ausgeführt Transfer-Encoding: chunked
.
Es wird auch ein enthalten Vary: Accept-Encoding
, das bereits auf das Problem hinweist. Content-Encoding
scheint Teil der Entität zu sein, daher bedeutet das Ändern der Content-Encoding
Beträge zu einer Änderung der Entität, dh ein anderer Accept-Encoding
Header bedeutet, dass beispielsweise ein Cache seine zwischengespeicherte Version der ansonsten identischen Entität nicht verwenden kann.
Gibt es eine eindeutige Antwort darauf, die ich verpasst habe (und die nicht in einer Nachricht in einem langen Thread in einer Apache-Newsgroup vergraben ist)?
Mein aktueller Eindruck ist:
- Transfer-Encoding wäre in der Tat der richtige Weg, um das zu tun, was meistens mit Content-Encoding durch vorhandene Server- und Client-Implementierungen gemacht wird
- Die Inhaltscodierung ist aufgrund ihrer semantischen Auswirkungen mit einigen Problemen verbunden (was sollte der Server tun,
ETag
wenn er eine Antwort transparent komprimiert?). - Der Grund ist Chicken'n'egg: Browser unterstützen es nicht, weil Server dies nicht tun, weil Browser dies nicht tun
Ich gehe also davon aus, dass der richtige Weg ein wäre Transfer-Encoding: gzip
(oder, wenn ich den Körper zusätzlich zerhacke, würde es werden Transfer-Encoding: gzip, chunked
). Und in diesem Fall kein Grund zum Berühren Vary
oder für ETag
einen anderen Header, da es sich um eine Sache auf Transportebene handelt.
Im Moment ist mir das "Hop-by-Hop" -Ness von Transfer-Encoding
etwas nicht so wichtig , worüber sich andere in erster Linie Sorgen zu machen scheinen, da Proxys möglicherweise dekomprimiert und unkomprimiert an den Client weitergeleitet werden. Proxys können es jedoch genauso gut weiterleiten wie es ist (komprimiert), wenn die ursprüngliche Anforderung den richtigen Accept-Encoding
Header hat, was bei allen mir bekannten Browsern eine Selbstverständlichkeit ist.
Übrigens ist dieses Problem mindestens ein Jahrzehnt alt, siehe z . B. https://bugzilla.mozilla.org/show_bug.cgi?id=68517 .
Jede Klarstellung hierzu wird geschätzt. Sowohl in Bezug auf das, was als standardkonform angesehen wird, als auch in Bezug auf das, was als praktisch angesehen wird. Beispielsweise wären HTTP-Client-Bibliotheken, die nur transparente "Content-Encoding" unterstützen, ein Argument gegen die Praktikabilität.
Transfer-Encoding:gzip
, obwohl das Kommandozeilen-Curl dies nicht tut. Um auf der sicheren Seite zu sein, senden Sie beide, es sei denn, Sie kombinieren Chunked und Gzip.