Кодировка передачи: gzip или Кодировка содержимого: gzip
Каково текущее положение дел, когда дело доходит до того, чтобы сделать
Transfer-Encoding: gzip
или
Content-Encoding: gzip
когда я хочу разрешитьclients например, с ограниченная пропускная способностьsignal their willingness to accept a compressed response иserver have the final say whether or not to compress.
Последний, например, то, что Apache mod_deflate и IIS делают, если вы позволите ему позаботиться о сжатии. В зависимости от размера содержимого, которое будет сжато, будет выполнено дополнительноеTransfer-Encoding: chunked
.
Это также будет включать в себяVary: Accept-Encoding
, который уже намекает на проблему.Content-Encoding
кажется частью сущности, поэтому изменениеContent-Encoding
равносильно изменению субъекта, то есть другомуAccept-Encoding
заголовок означает, например, кеш не может использовать свою кешированную версию идентичной сущности.
Есть ли определенный ответ на этот вопрос, который я пропустил (и который не скрыт внутри сообщения в длинной ветке в какой-то группе новостей apache)?
Мое нынешнее впечатление:
Transfer-Encoding would in fact be the right way to do what is mostly done with Content-Encoding by existing server and client implentations Content-Encoding, because of its semantic implications, carries a couple of issues (what should the server do to theETag
when it transparently compresses a response?)
The reason is chicken'n'egg: Browsers don't support it because servers don't because browsers don't
Таким образом, я предполагаю, что правильный путь будетTransfer-Encoding: gzip
(или, если я дополнительно порчу тело, этостанет Transfer-Encoding: gzip, chunked
). И нет причин для прикосновенияVary
или жеETag
или любой другой заголовок в этом случае, поскольку он является элементом транспортного уровня.
На данный момент я не слишком беспокоюсь о «хоп-хоп-хе»Transfer-Encoding
что-то, о чем другие, кажется, беспокоятся в первую очередь, потому что прокси-серверы могут распаковывать и пересылать несжатый клиенту. Однако прокси-серверы могут с такой же скоростью пересылать его как есть (сжатый), если исходный запрос имеетAccept-Encoding
заголовок, который в случае всех браузеров, которые я знаю, является данным.
Кстати, этой проблеме, по крайней мере, десятилетие, см., Например, https://bugzilla.mozilla.org/show_bug.cgi?id=68517 .
Любые разъяснения по этому поводу будут оценены. И с точки зрения того, что считается соответствующим стандартам, и того, что считается практичным. Например, клиентские библиотеки HTTP поддерживают только прозрачное & quot; Content-Encoding & quot; будет аргумент против практичности.