Qual è lo stato attuale delle cose quando si tratta di fare o meno
Transfer-Encoding: gzip
o a
Content-Encoding: gzip
quando voglio consentire ai client con una larghezza di banda limitata, ad esempio, di segnalare la loro disponibilità ad accettare una risposta compressa e il server ha l'ultima parola se comprimere o meno .
Quest'ultimo è ciò che, ad esempio, mod_deflate e IIS di Apache fanno, se si lascia che si occupi della compressione. A seconda della dimensione del contenuto da comprimere, farà l'addizionale Transfer-Encoding: chunked
.
Includerà anche un Vary: Accept-Encoding
, che già accenna al problema. Content-Encoding
sembra essere parte dell'entità, quindi modificare gli Content-Encoding
importi in una modifica dell'entità, ovvero Accept-Encoding
un'intestazione diversa significa, ad esempio, che una cache non può utilizzare la sua versione memorizzata nella cache dell'entità altrimenti identica.
C'è una risposta definitiva su questo che mi sono perso (e che non è sepolta all'interno di un messaggio in un lungo thread in qualche newsgroup di Apache)?
La mia impressione attuale è:
- Transfer-Encoding sarebbe infatti il modo giusto per fare ciò che viene fatto principalmente con Content-Encoding da implementazioni di server e client esistenti
- La codifica del contenuto, a causa delle sue implicazioni semantiche, comporta un paio di problemi (cosa dovrebbe fare il server
ETag
quando comprime in modo trasparente una risposta?) - Il motivo è chicken'n'egg: i browser non lo supportano perché i server no perché i browser no
Quindi presumo che il modo giusto sarebbe un Transfer-Encoding: gzip
(o, se anche un altro pezzo del corpo, diventerebbe Transfer-Encoding: gzip, chunked
). E non c'è motivo di toccare Vary
o ETag
o qualsiasi altra intestazione in quel caso poiché è una cosa a livello di trasporto.
Per ora non mi interessa molto del 'hop-by-hop' Transfer-Encoding
, qualcosa di cui gli altri sembrano preoccuparsi prima di tutto, perché i proxy potrebbero decomprimersi e inoltrare non compressi al client. Tuttavia, i proxy potrebbero altrettanto bene inoltrarlo così com'è (compresso), se la richiesta originale ha l' Accept-Encoding
intestazione corretta , che nel caso di tutti i browser che conosco è un dato di fatto.
A proposito, questo problema ha almeno un decennio, vedere ad esempio https://bugzilla.mozilla.org/show_bug.cgi?id=68517 .
Ogni chiarimento in merito sarà gradito. Sia in termini di ciò che è considerato conforme agli standard che di ciò che è considerato pratico. Ad esempio, le librerie client HTTP che supportano solo la "Content-Encoding" trasparente sarebbero un argomento contro la praticità.
Transfer-Encoding:gzip
, anche se curl da riga di comando lo fa. Per sicurezza, invia entrambi, a meno che tu non stia combinando chunked e gzip.