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 nieZakł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.