Quel est l'état actuel des choses lorsqu'il s'agit de faire ou non
Transfer-Encoding: gzip
ou un
Content-Encoding: gzip
lorsque je veux permettre à des clients avec par exemple une bande passante limitée de signaler leur volonté d'accepter une réponse compressée et que le serveur a le dernier mot sur la compression ou non .
C'est ce que font par exemple le mod_deflate d'Apache et IIS, si vous le laissez prendre en charge la compression. En fonction de la taille du contenu à compresser, il fera le plus Transfer-Encoding: chunked
.
Il comprendra également un Vary: Accept-Encoding
, qui fait déjà allusion au problème. Content-Encoding
semble faire partie de l'entité, donc changer les Content-Encoding
montants en un changement d'entité, c'est-à-dire un en- Accept-Encoding
tête différent signifie par exemple qu'un cache ne peut pas utiliser sa version mise en cache de l'entité par ailleurs identique.
Y a-t-il une réponse définitive à ce sujet que j'ai manquée (et qui n'est pas enterrée dans un message dans un long fil de discussion dans un groupe de discussion Apache)?
Mon impression actuelle est:
- Transfer-Encoding serait en fait la bonne façon de faire ce qui est principalement fait avec Content-Encoding par les implémentations existantes de serveur et de client
- Content-Encoding, en raison de ses implications sémantiques, pose quelques problèmes (que doit faire le serveur
ETag
lorsqu'il compresse une réponse de manière transparente?) - La raison en est chicken'n'egg: les navigateurs ne le prennent pas en charge parce que les serveurs ne le font pas parce que les navigateurs ne le font pas
Donc, je suppose que la bonne manière serait un Transfer-Encoding: gzip
(ou, si je découpais en plus le corps, il le deviendrait Transfer-Encoding: gzip, chunked
). Et aucune raison de toucher Vary
ou ETag
ou tout autre en-tête dans ce cas, car c'est une chose au niveau du transport.
Pour l'instant, je ne me soucie pas trop du «saut par saut» de Transfer-Encoding
, quelque chose dont les autres semblent se préoccuper avant tout, parce que les proxys peuvent décompresser et transmettre non compressés au client. Cependant, les proxys peuvent tout aussi bien le transmettre tel quel (compressé), si la demande d'origine a l'en- Accept-Encoding
tête approprié , ce qui dans le cas de tous les navigateurs que je connais est une donnée.
Btw, ce problème date d'au moins une décennie, voir par exemple https://bugzilla.mozilla.org/show_bug.cgi?id=68517 .
Toute clarification à ce sujet sera appréciée. À la fois en termes de ce qui est considéré comme conforme aux normes et de ce qui est considéré comme pratique. Par exemple, les bibliothèques clientes HTTP ne prenant en charge que le "Content-Encoding" transparent serait un argument contre l'aspect pratique.
Transfer-Encoding:gzip
, bien que curl en ligne de commande le fasse. Pour être prudent, envoyez les deux, sauf si vous combinez chunked et gzip.