Wie kann HTTP-Proxy-Caches entscheiden zwischen dem Dienst identitäts vs. gzip-kodierte Ressourcen?
-
22-08-2019 - |
Frage
Ein HTTP-Server verwendet Content-Negotiation eine einzelne URL Identitäts- oder gzip-encoded auf der Client-Accept-Encoding
Headers zu dienen.
Jetzt sagen wir einen Proxy-Cache wie Tintenfische zwischen Clients und dem httpd.
Wenn der Proxy beiden Kodierungen einer URL zwischengespeichert hat, wie funktioniert es festzustellen, welche zu dienen?
Die nicht-gzip-Instanz (nicht ursprünglich mit Vary
serviert) kann auf jeden Client bedient werden, aber die codierten Instanzen (mit Vary: Accept-Encoding
) nur mit dem identischen Accept-Encoding
Header-Wert an einem Kunden gesendet werden, wie in der ursprünglichen Anforderung verwendet wurde .
z. Opera sendet "deflate, gzip, x-gzip, identity, *;q=0"
aber IE8 sendet "gzip, deflate"
. Gemäß der Spezifikation, dann sollten Caches nicht inhalt codierten Caches zwischen den beiden Browsern teilen. Ist das wahr?
Lösung
Zunächst einmal ist es meine Meinung nach falsch nicht „Vary: Accept-Encoding“ zu senden., Wenn das Unternehmen in der Tat variiert von diesem Header (oder deren Abwesenheit)
aber sagen, dass die Spezifikation zur Zeit in der Tat verweigert das die zwischengespeicherte Antwort auf Opera dient, weil die Vary-Header nicht gemäß den Definitionen überein a href in <= "http://greenbytes.de/tech/webdav/draft-ietf -httpbis-p6-Cache-06.html # rfc.section.2.6" rel = "noreferrer"> HTTPbis, Teil 6, Abschnitt 2.6 . Vielleicht ist dies ein Bereich, in dem wir die Anforderungen an Caches entspannen sollte (vielleicht möchten Sie auf der IETF HTTP-Mailingliste ...
UPDATE: stellt sich heraus, dass dies als eine offene Frage bereits markiert war; Ich habe ein Problem in unserem Issue Tracker hinzugefügt, um es finden Sie unter Ausgabe 147 .
Andere Tipps
Julian ist natürlich recht. Lektion:. Immer senden Vary: Accept-Encoding
wenn Accept-Encoding
Schnupfen, egal, was die Antwort Codierung
meine Frage zu beantworten, wenn Sie Vary
aus versehentlich verlassen, wenn ein Proxy erhält eine nicht-codierte Antwort (ohne Vary
), kann sie einfach zwischenzuspeichern und gibt diese für jede nachfolgende Anforderung (ohne Berücksichtigung Accept-Encoding
). Squid tut dies .
Das große Problem bei Weglassen Vary ist, dass, wenn der Cache ohne eine codierte Variante erhält Vary dann kann es dies als Reaktion auf andere Anfragen senden, auch wenn ihr Accept-Encoding des Client zeigt an kann den Inhalt nicht verstehen.