Каково текущее состояние дел, когда дело доходит до
Transfer-Encoding: gzip
или
Content-Encoding: gzip
когда я хочу разрешить клиентам, например. ограниченная полоса пропускания до сигнализирует о готовности принять сжатый отклик, а сервер имеет окончательное мнение о том, следует ли сжимать.
Последний - это то, что, например, Apache mod_deflate и IIS делают, если вы позволите ему позаботиться о сжатии. В зависимости от размера сжатого содержимого он будет делать дополнительные Transfer-Encoding: chunked
.
Он также будет включать Vary: Accept-Encoding
, который уже намекает на проблему. Content-Encoding
представляется частью сущности, поэтому изменение Content-Encoding
сводится к изменению объекта, то есть другого заголовка Accept-Encoding
, например, кеш не может использовать свою кешированную версию идентично идентичного объекта.
Есть ли определенный ответ на этот вопрос, который я пропустил (и который не зарылся внутри сообщения в длинном потоке в какой-то новостной группе apache)?
Мое настоящее впечатление:
- Передача-кодирование на самом деле будет правильным способом делать то, что в основном делается с Content-Encoding, с помощью существующих имплантаций сервера и клиента.
- Content-Encoding из-за его семантических последствий имеет несколько проблем (что должен делать сервер с
ETag
при прозрачном сжатии ответа?) - Причина chicken'n'egg: браузеры не поддерживают его, потому что серверы не потому, что браузеры не
Итак, я предполагаю, что правильный путь будет Transfer-Encoding: gzip
(или, если я дополнительно куском тела, станет Transfer-Encoding: gzip, chunked
). И нет причин касаться Vary
или ETag
или любого другого заголовка в этом случае, поскольку это вещь транспортного уровня.
На данный момент меня не слишком волнует "hop-by-hop" из Transfer-Encoding
, что-то, что другие, похоже, беспокоят в первую очередь, потому что прокси могут распаковывать и пересылать несжатые клиенту, Однако прокси-серверы могут так же перенаправить его как-есть (сжатый), если исходный запрос имеет правильный заголовок Accept-Encoding
, который в случае всех браузеров, которые, как я знаю, являются данными.
Btw, эта проблема составляет, по меньшей мере, десятилетие, см., например, https://bugzilla.mozilla.org/show_bug.cgi?id=68517.
Любые разъяснения по этому вопросу будут оценены. Как с точки зрения того, что считается стандартным, так и с точки зрения практичности. Например, HTTP-клиентские библиотеки, поддерживающие только прозрачную "Content-Encoding", будут аргументом против практичности.