¿Cuál es el estado actual de las cosas cuando se trata de si hacer
Transfer-Encoding: gzip
o un
Content-Encoding: gzip
cuando quiero permitir que los clientes, por ejemplo, con un ancho de banda limitado, indiquen su voluntad de aceptar una respuesta comprimida y el servidor tenga la última palabra sobre si comprimir o no .
Esto último es lo que hacen, por ejemplo, mod_deflate e IIS de Apache, si deja que se encargue de la compresión. Dependiendo del tamaño del contenido a comprimir, hará lo adicional Transfer-Encoding: chunked
.
También incluirá un Vary: Accept-Encoding
, que ya insinúa el problema. Content-Encoding
parece ser parte de la entidad, por lo que cambiar las Content-Encoding
cantidades a un cambio de la entidad, es decir, un Accept-Encoding
encabezado diferente significa, por ejemplo, que un caché no puede usar su versión en caché de la entidad por lo demás idéntica.
¿Hay una respuesta definitiva a esto que me he perdido (y que no está enterrada dentro de un mensaje en un hilo largo en algún grupo de noticias de Apache)?
Mi impresión actual es:
- Transfer-Encoding sería, de hecho, la forma correcta de hacer lo que se hace principalmente con Content-Encoding mediante implementaciones de servidor y cliente existentes
- Content-Encoding, debido a sus implicaciones semánticas, conlleva un par de problemas (¿qué debe hacer el servidor
ETag
cuando comprime de forma transparente una respuesta?) - La razón es chicken'n'egg: los navegadores no lo admiten porque los servidores no lo hacen porque los navegadores no
Así que supongo que la forma correcta sería un Transfer-Encoding: gzip
(o, si además trozo el cuerpo, se convertiría Transfer-Encoding: gzip, chunked
). Y no hay razón para tocar Vary
o ETag
cualquier otro encabezado en ese caso, ya que es una cosa a nivel de transporte.
Por ahora no me importa demasiado el 'salto a salto' Transfer-Encoding
, algo que a los demás parece preocuparles en primer lugar, porque los proxies pueden descomprimir y reenviar sin comprimir al cliente. Sin embargo, los proxies podrían reenviarlo tal como está (comprimido), si la solicitud original tiene el Accept-Encoding
encabezado adecuado , que en el caso de todos los navegadores que conozco es un hecho.
Por cierto, este problema tiene al menos una década, consulte, por ejemplo, https://bugzilla.mozilla.org/show_bug.cgi?id=68517 .
Se agradecerá cualquier aclaración al respecto. Tanto en términos de lo que se considera compatible con los estándares como de lo que se considera práctico. Por ejemplo, las bibliotecas cliente HTTP que solo admitan una "codificación de contenido" transparente serían un argumento en contra de la practicidad.
Transfer-Encoding:gzip
, aunque la línea de comandos curl sí. Para estar seguro, envíe ambos, a menos que esté combinando chunked y gzip.