Який зараз стан справ, коли мова заходить про те, чи потрібно це робити
Transfer-Encoding: gzip
або а
Content-Encoding: gzip
коли я хочу дозволити клієнтам, наприклад, обмежену пропускну здатність, сигналізувати про свою готовність прийняти стиснуту відповідь, і сервер має остаточне слово, чи потрібно стискати чи ні .
Останнє те, що роблять, наприклад, mod_deflate Apache та IIS, якщо ви дозволите йому подбати про стиснення. Залежно від розміру вмісту, який потрібно стиснути, це зробить додаткове Transfer-Encoding: chunked
.
Він також включатиме символ Vary: Accept-Encoding
, який вже натякає на проблему. Content-Encoding
здається частиною сутності, тому зміна Content-Encoding
сум на зміну сутності, тобто інший Accept-Encoding
заголовок означає, наприклад, кеш не може використовувати свою кешовану версію інакшої сутності.
Чи є на це чітка відповідь, яку я пропустив (і це не заховано в повідомленні довгою ниткою в якійсь групі новин apache)?
Моє поточне враження:
- Трансферне кодування насправді було б правильним способом зробити те, що в основному робиться із кодуванням вмісту існуючими реалізаціями сервера та клієнта
- Кодування вмісту через його семантичні наслідки містить кілька питань (що робити серверу,
ETag
коли прозоро стискає відповідь?) - Причиною є куряче яйце: браузери не підтримують це, оскільки сервери не підтримують те, що браузери не підтримують
Отже, я припускаю, що правильний шлях буде Transfer-Encoding: gzip
(або, якщо я додатково порвати тіло, це стане Transfer-Encoding: gzip, chunked
). І немає жодної причини торкатися Vary
або ETag
будь-якого іншого заголовка в такому випадку, оскільки це річ транспортного рівня.
На даний момент я не надто дбаю про "стрибковість" Transfer-Encoding
, про те, що, напевно, турбує інших в першу чергу, тому що проксі-сервери можуть стискати і пересилати нестисненим до клієнта. Однак проксі-сервери можуть так само переслати його як є (стиснутий), якщо вихідний запит має відповідний Accept-Encoding
заголовок, який у випадку всіх браузерів, які я знаю, є даними.
До речі, цьому випуску щонайменше десятиліття, див., Наприклад, https://bugzilla.mozilla.org/show_bug.cgi?id=68517 .
Будемо вдячні за будь-які роз’яснення щодо цього. Як з точки зору того, що вважається відповідним стандартам, так і того, що вважається практичним. Наприклад, клієнтські бібліотеки HTTP, що підтримують лише прозоре "Кодування вмісту", будуть аргументом проти практичності.
Transfer-Encoding:gzip
, хоча curl командного рядка це робить. Щоб бути в безпеці, надішліть обидва, якщо ви не поєднуєте фрагменти та gzip.