Как кэши HTTP-прокси решают между обслуживанием идентификационных данных иресурсы в формате gzip?

StackOverflow https://stackoverflow.com/questions/694918

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top