Tengo un problema extraño en mi PC con Windows 7 de 64 bits en el trabajo. Administro algunos servidores web Linux que sirven contenido comprimido (js, css, html). El comportamiento extraño es que cuando todos los navegadores de mi sistema (Firefox, Chrome, Vivaldi) solicitan contenido de esos servidores Linux (puedo ver el Accept-Encoding: gzip,deflate
encabezado perfectamente), no lo obtienen. Todas las respuestas vienen con Transfer-Encoding: chunked
, por lo que el contenido no se entrega comprimido. Sin embargo, al ejecutar curl
la línea de comando con la --compressed
opción, la respuesta viene con Content-Type: gzip
encabezados Content-Length
y está comprimida como se supone que debe ser. Desde un servidor Windows 2008 R2, el contenido se entrega comprimido con gzip.
Servir el contenido comprimido con gzip funciona bien en esos servidores web Linux, eso está garantizado.
Hay un proxy pfSense involucrado, pero incluso si lo anulo en la configuración del proxy para que el navegador solicite el contenido directamente desde los servidores Linux, el comportamiento es el mismo. Sin cambios, con o sin poder.
Confirmé el problema con Firefox y Chrome con otra PC con Windows 7 de 64 bits. Entonces, llego a la conclusión de que el sistema operativo está involucrado de alguna manera en este extraño comportamiento del navegador.
¿Alguien puede confirmar...?
Respuesta1
Esto puede ser engañoso: para enviar el archivo comprimido en un solo mensaje, el servidor necesita tener todo el archivo disponible y conocer su tamaño, lo que aparentemente no sucede en su caso, como usted mismo dijo:
Al ejecutar curl en la línea de comando con la
--compressed
opción, la respuesta viene conContent-Type: gzip
encabezadosContent-Length
y está comprimida como se supone que debe ser.
Creo que en tu caso el servidortuberíala salida a gzip y luego canaliza el resultado directamente al navegador sin escribir primero los datos en el disco para calcular el tamaño del archivo. Sin saber de antemano el tamaño, el servidor no tiene más remedio que devolver una transmisión Transfer-Encoding: chunked
en tantas partes como estén disponibles.
A medida que los datos estén disponibles, se devolverán en fragmentos para que el navegador los vuelva a ensamblar. Sin embargo, los datos recibidos todavía están comprimidos, incluso si se reciben en fragmentos.