Eu tenho um problema estranho no meu PC com Windows 7 de 64 bits no trabalho. Eu administro alguns servidores web Linux que servem conteúdo gzipado (js, css, html). O comportamento estranho é que, quando todos os navegadores do meu sistema (Firefox, Chrome, Vivaldi) solicitam conteúdo desses servidores Linux (posso ver o Accept-Encoding: gzip,deflate
cabeçalho perfeitamente), eles não o obtêm. Todas as respostas vêm com Transfer-Encoding: chunked
, então o conteúdo não é servido compactado. No entanto, executando curl
na linha de comando com a --compressed
opção, a resposta vem com cabeçalhos Content-Type: gzip
e Content-Length
é gzipada como deveria ser. A partir de um servidor Windows 2008 R2, o conteúdo é servido como gzipado.
Servir o conteúdo como gzipado funciona bem nesses servidores web Linux, isso é garantido.
Há um proxy pfSense envolvido, mas mesmo que eu o substitua nas configurações de proxy para que o navegador solicite o conteúdo diretamente dos servidores Linux, o comportamento é o mesmo. Sem alteração, com ou sem procuração.
Confirmei o problema com o Firefox e o Chrome com outro PC com Windows 7 de 64 bits. Então, chego à conclusão de que o sistema operacional está de alguma forma envolvido nesse estranho comportamento do navegador.
Alguém pode confirmar...?
Isso pode enganar: Para enviar o arquivo gzipp'ed em uma mensagem, o servidor precisa ter todo o arquivo disponível e saber seu tamanho, o que aparentemente não acontece no seu caso, como você mesmo disse:
Acho que, no seu caso, o servidor canaliza a saída para gzip e, em seguida, canaliza o resultado diretamente para o navegador sem primeiro gravar os dados no disco para calcular o tamanho do arquivo. Sem saber de antemão o tamanho, o servidor não tem escolha a não ser retornar um stream com
Transfer-Encoding: chunked
quantas partes estiverem disponíveis.À medida que os dados estiverem disponíveis, eles serão retornados em blocos, para serem remontados pelo navegador. No entanto, os dados recebidos ainda são compactados em gzip, mesmo que sejam recebidos em blocos.