Transfer-Encoding: gzip vs. Content-Encoding: gzip
Qual é o estado atual das coisas quando se trata de fazer
Transfer-Encoding: gzip
ou um
Content-Encoding: gzip
quando eu quero permitirclientes com por ex. largura de banda limitadasinalizar sua vontade de aceitar uma resposta comprimida e aservidor tem a palavra final se deve ou não comprimir.
O último é o que e. O mod_deflate e o IIS do Apache fazem isso, se você permitir que ele cuide da compactação. Dependendo do tamanho do conteúdo a ser compactado, ele fará o adicionalTransfer-Encoding: chunked
.
Incluirá também umVary: Accept-Encoding
, que já sugere o problema.Content-Encoding
parece ser parte da entidade, mudando assim aContent-Encoding
equivale a uma mudança da entidade, ou seja, umAccept-Encoding
cabeçalho significa, e. um cache não pode usar sua versão em cache da entidade idêntica.
Existe uma resposta definitiva sobre isso que eu perdi (e isso não está enterrado dentro de uma mensagem em um longo tópico em algum grupo de notícias do Apache)?
Minha impressão atual é:
A codificação de transferência seria, na verdade, a maneira correta de fazer o que é feito principalmente com o Content-Encoding por meio de implantações de servidor e cliente existentesO Content-Encoding, por causa de suas implicações semânticas, carrega alguns problemas (o que o servidor deve fazer aoETag
quando transparentemente comprime uma resposta?)A razão é o chicken'n'egg: os navegadores não suportam isso porque os servidores não o fazem porque os navegadores nãoEntão eu estou supondo que o caminho certo seria umTransfer-Encoding: gzip
(ou, se eu, adicionalmente, naco o corpo,se tornaria Transfer-Encoding: gzip, chunked
). E não há razão para tocarVary
ouETag
ou qualquer outro cabeçalho nesse caso, pois é uma coisa do nível de transporte.
Por enquanto eu não me importo muito com o 'hop-by-hop'-ness deTransfer-Encoding
, algo que os outros parecem estar preocupados em primeiro lugar, porque os proxies podem descompactar e encaminhar descomprimidos para o cliente. No entanto, os proxies podem também enviá-los como estão (compactados), se o pedido original tiver oAccept-Encoding
cabeçalho, que no caso de todos os navegadores que eu conheço é um dado.
Btw, esta questão tem pelo menos uma década, ver por exemplohttps://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 cliente HTTP que suportam apenas "Content-Encoding" transparente seriam um argumento contra a praticidade.