Tenho um problema estranho no meu PC com Windows 7 de 64 bits no trabalho. Eu administro alguns servidores web Linux que fornecem conteúdo compactado (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 entendem. Todas as respostas vêm com Transfer-Encoding: chunked
, portanto o conteúdo não é veiculado compactado. No entanto, executando curl
na linha de comando com a --compressed
opção, a resposta vem com Content-Type: gzip
cabeçalhos Content-Length
e e é compactada como deveria ser. Em um servidor Windows 2008 R2, o conteúdo é servido como compactado.
Servir o conteúdo compactado 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. Nenhuma alteração, com ou sem proxy.
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 comportamento estranho do navegador.
Alguém pode confirmar...?
Responder1
Isso pode enganar: para enviar o arquivo gzipp'ed em uma mensagem, o servidor precisa ter o arquivo inteiro disponível e saber seu tamanho, o que aparentemente não acontece no seu caso, como você mesmo disse:
executando curl na linha de comando com a
--compressed
opção, a resposta vem comContent-Type: gzip
cabeçalhosContent-Length
e é compactada como deveria ser.
Eu acho que no seu caso o servidortubosa 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 em Transfer-Encoding: chunked
quantas partes estiverem disponíveis.
À medida que os dados ficam disponíveis, eles serão retornados em pedaços, para serem remontados pelo navegador. No entanto, os dados recebidos ainda são compactados, mesmo se recebidos em pedaços.