Каким образом HTTP-кеши прокси-сервера выбирают между обслуживанием идентификаторов и ресурсов, закодированных в gzip? - PullRequest
6 голосов
/ 29 марта 2009

HTTP-сервер использует согласование содержимого для обслуживания одиночного URL-адреса или в кодировке gzip на основе клиентского заголовка Accept-Encoding.

Теперь скажите, что у нас есть прокси-кеш, такой как squid, между клиентами и httpd.

Если прокси-сервер кэшировал обе кодировки URL-адреса, как он определяет, какой из них обслуживать?

Экземпляр без gzip (изначально не обслуживаемый Vary) может быть передан любому клиенту, но закодированные экземпляры (имеющие Vary: Accept-Encoding) могут отправляться только клиентам с идентичным значением заголовка Accept-Encoding был использован в исходном запросе.

например. Opera отправляет "deflate, gzip, x-gzip, identity, *;q=0", а IE8 отправляет "gzip, deflate". В соответствии со спецификацией, кеши не должны совместно использовать контент-закодированные кеши между двумя браузерами. Это правда?

Ответы [ 3 ]

7 голосов
/ 29 марта 2009

Прежде всего, ИМХО неправильно отправлять «Vary: Accept-Encoding», когда сущность действительно зависит от этого заголовка (или его отсутствия).

При этом спецификация в настоящее время действительно запрещает обслуживать кэшированный ответ Opera, поскольку заголовок Vary не совпадает с определениями в HTTPbis, часть 6, раздел 2.6 . Возможно, именно в этой области нам следует ослабить требования к кэшам (возможно, вы захотите следить за списком рассылки IETF HTTP ...

ОБНОВЛЕНИЕ: оказывается, это уже было помечено как открытый вопрос; Я только что добавил проблему в наш трекер, см. Issue 147 .

1 голос
/ 17 марта 2010

Большая проблема с опущением Vary состоит в том, что если кэш получает закодированный вариант без Vary, то он МОЖЕТ отправить это в ответ на другие запросы, даже если их Accept-Encoding указывает, что клиент не может понять содержимое.

1 голос
/ 30 марта 2009

Джулиан прав, конечно. Урок: Всегда отправлять Vary: Accept-Encoding при сниффинге Accept-Encoding, независимо от кодировки ответа.

Чтобы ответить на мой вопрос, если вы ошибочно пропустите Vary, если прокси-сервер получает некодированный ответ (без Vary), он может просто кэшировать и возвращать его для каждого последующего запроса (игнорируя Accept-Encoding) , Squid делает это .

...