Bagaimana keadaan saat ini tentang apakah harus melakukan
Transfer-Encoding: gzip
atau a
Content-Encoding: gzip
ketika saya ingin mengizinkan klien dengan misalnya bandwidth terbatas untuk memberi sinyal kesediaan mereka untuk menerima respons terkompresi dan server memiliki keputusan akhir apakah akan mengompres atau tidak .
Yang terakhir adalah apa yang dilakukan misalnya mod_deflate dan IIS Apache, jika Anda membiarkannya menangani kompresi. Bergantung pada ukuran konten yang akan dikompresi, itu akan melakukan tambahan Transfer-Encoding: chunked
.
Ini juga akan menyertakan a Vary: Accept-Encoding
, yang sudah mengisyaratkan masalah. Content-Encoding
tampaknya menjadi bagian dari entitas, jadi mengubah Content-Encoding
jumlah menjadi perubahan entitas, yaitu Accept-Encoding
header yang berbeda berarti misalnya cache tidak dapat menggunakan versi cache dari entitas yang identik.
Apakah ada jawaban pasti tentang ini yang saya lewatkan (dan itu tidak terkubur di dalam pesan di utas panjang di beberapa newsgroup Apache)?
Kesan saya saat ini adalah:
- Transfer-Encoding sebenarnya akan menjadi cara yang tepat untuk melakukan apa yang sebagian besar dilakukan dengan Content-Encoding oleh server yang ada dan implementasi klien
- Content-Encoding, karena implikasi semantiknya, membawa beberapa masalah (apa yang harus dilakukan server
ETag
ketika secara transparan memampatkan respons?) - Alasannya adalah ayam'n'egg: Browser tidak mendukungnya karena server tidak mendukungnya karena browser tidak
Jadi saya berasumsi bahwa cara yang benar adalah a Transfer-Encoding: gzip
(atau, jika saya juga memotong tubuh, itu akan menjadi Transfer-Encoding: gzip, chunked
). Dan tidak ada alasan untuk menyentuh Vary
atau ETag
atau tajuk lain dalam hal ini karena ini adalah hal tingkat pengangkutan.
Untuk saat ini saya tidak terlalu peduli tentang 'hop-by-hop'-ness Transfer-Encoding
, sesuatu yang tampaknya menjadi perhatian orang lain pertama dan terutama, karena proxy mungkin membuka kompresi dan meneruskan tanpa kompresi ke klien. Namun, proxy mungkin juga meneruskannya sebagaimana adanya (dikompresi), jika permintaan asli memiliki Accept-Encoding
tajuk yang tepat , yang dalam kasus ini semua browser yang saya tahu diberikan.
Ngomong-ngomong, masalah ini setidaknya sudah berumur satu dekade, lihat misalnya https://bugzilla.mozilla.org/show_bug.cgi?id=68517 .
Klarifikasi apa pun tentang ini akan dihargai. Baik dalam hal apa yang dianggap memenuhi standar dan apa yang dianggap praktis. Misalnya, pustaka klien HTTP yang hanya mendukung "Content-Encoding" transparan akan menjadi argumen yang menentang kepraktisan.