Qual é o estado atual das coisas quando se trata de fazer
Transfer-Encoding: gzip
ou um
Content-Encoding: gzip
quando desejo permitir que clientes com, por exemplo, largura de banda limitada, sinalizem sua disposição de aceitar uma resposta compactada e o servidor tenha a palavra final se deve compactar ou não .
O último é o que, por exemplo, o mod_deflate do Apache e o IIS fazem, se você permitir que ele cuide da compactação. Dependendo do tamanho do conteúdo a ser compactado, ele fará o adicional Transfer-Encoding: chunked
.
Também incluirá um Vary: Accept-Encoding
, que já indica o problema. Content-Encoding
parece ser parte da entidade, portanto, alterar os Content-Encoding
valores para uma alteração da entidade, ou seja, um Accept-Encoding
cabeçalho diferente significa, por exemplo, um cache não pode usar sua versão em cache da entidade idêntica de outra forma.
Existe uma resposta definitiva sobre isso que eu perdi (e que não está enterrada dentro de uma mensagem em uma longa discussão em algum grupo de notícias do Apache)?
Minha impressão atual é:
- A codificação de transferência seria, de fato, a maneira certa de fazer o que geralmente é feito com a codificação de conteúdo pelas implementações existentes de servidor e cliente
- A codificação de conteúdo, por causa de suas implicações semânticas, traz alguns problemas (o que o servidor deve fazer para
ETag
quando comprime uma resposta de forma transparente?) - O motivo é frango'n'egg: os navegadores não suportam porque os servidores não, porque os navegadores não
Portanto, estou assumindo que o caminho certo seria um Transfer-Encoding: gzip
(ou, se eu adicionalmente dividir o corpo, ele se tornaria Transfer-Encoding: gzip, chunked
). E não há razão para tocar em Vary
ou ETag
ou qualquer outro cabeçalho nesse caso, pois é uma coisa de nível de transporte.
Por enquanto, não me importo muito com o 'salto a salto' de Transfer-Encoding
, algo que os outros parecem estar preocupados em primeiro lugar, porque os proxies podem descompactar e encaminhar descompactado para o cliente. No entanto, os proxies podem muito bem encaminhá-lo no estado em que se encontra (compactado), se a solicitação original tiver o Accept-Encoding
cabeçalho adequado , o que, no caso de todos os navegadores que conheço, é um dado adquirido.
A propósito, esse problema já existe há pelo menos uma década, consulte, por exemplo, https://bugzilla.mozilla.org/show_bug.cgi?id=68517 .
Qualquer esclarecimento sobre isso será apreciado. Tanto em termos do que é considerado compatível com os padrões quanto do que é considerado prático. Por exemplo, as bibliotecas de cliente HTTP que suportam apenas "Codificação de conteúdo" transparente seriam um argumento contra a praticidade.
Transfer-Encoding:gzip
, embora curl de linha de comando sim. Para ficar no lado seguro, envie ambos, a menos que você esteja combinando chunked e gzip.