Transfer-Encoding: gzip vs. Content-Encoding: gzip

Jaki jest obecny stan rzeczy, jeśli chodzi o to, czy to zrobić

Transfer-Encoding: gzip

lub a

Content-Encoding: gzip

kiedy chcę na to pozwolićklientów z np. ograniczona przepustowość dosygnalizują chęć zaakceptowania skompresowanej odpowiedzi iserwer ma ostatnie zdanie, czy kompresować, czy nie.

To ostatnie jest tym, co np. Apache's mod_deflate i IIS robią to, jeśli pozwolisz mu na kompresję. W zależności od rozmiaru skompresowanej treści zrobi to dodatkoweTransfer-Encoding: chunked.

Będzie również zawieraćVary: Accept-Encoding, co już wskazuje na problem.Content-Encoding wydaje się być częścią istoty, więc zmianaContent-Encoding oznacza zmianę jednostki, tj. innąAccept-Encoding nagłówek oznacza np. pamięć podręczna nie może używać swojej buforowanej wersji identycznej w innym przypadku.

Czy istnieje pewna odpowiedź na to, czego nie zauważyłem (a to nie jest ukryte w wiadomości w długim wątku w jakiejś grupie dyskusyjnej Apache)?

Moje obecne wrażenie to:

Transfer-Encoding byłby w rzeczywistości właściwym sposobem zrobienia tego, co jest w większości wykonywane z Content-Encoding przez istniejące implanty serwera i klientaContent-Encoding, ze względu na swoje semantyczne implikacje, niesie ze sobą kilka problemów (co serwer powinien zrobić zETag kiedy przejrzyście kompresuje odpowiedź?)Powodem jest chicken'n'egg: przeglądarki nie obsługują go, ponieważ serwery nie działają, ponieważ przeglądarki nie

Zakładam więc, że właściwą drogą będzie ATransfer-Encoding: gzip (lub, jeśli dodatkowo spięłam ciało, tostanie się Transfer-Encoding: gzip, chunked). I nie ma powodu, by dotykaćVary lubETag lub jakikolwiek inny nagłówek w tym przypadku, ponieważ jest to rzecz na poziomie transportu.

Na razie nie obchodzi mnie zbytnio „hop-by-hop”Transfer-Encoding, coś, co inni wydają się być zaniepokojeni przede wszystkim, ponieważ serwery proxy mogą rozpakować i przekazać nieskompresowane do klienta. Jednak serwery proxy mogą równie dobrze przekazywać je, ile są (skompresowane), jeśli pierwotne żądanie ma poprawneAccept-Encoding nagłówek, który w przypadku wszystkich przeglądarek, które znam, jest podany.

Tak, ten problem ma co najmniej dziesięć lat, patrz np.https://bugzilla.mozilla.org/show_bug.cgi?id=68517 .

Wszelkie wyjaśnienia na ten temat zostaną docenione. Zarówno pod względem tego, co jest uważane za zgodne ze standardami, jak i za praktyczne. Na przykład biblioteki klienta HTTP obsługujące tylko przezroczyste „kodowanie treści” byłyby argumentem przeciwko praktyczności.

questionAnswers(2)

yourAnswerToTheQuestion