Поправьте меня, если я ошибаюсь, и я знаю, что это старый пост - но я бы хотел прокомментировать новых прохожих. Я считаю, что кэш обратного прокси-сервера не помогает так сильно, как вы хотели бы при использовании ETag.
Механизмы кэширования проверки используют исходный сервер для проверки того, является ли ETag (или дата последнего изменения) в запросе все еще действительным (совпадает или не совпадает с etag ресурсов, в зависимости от того, какой заголовок используется, или был / не был изменен с даты, указанной в запросе).
Это означает, что кэш обратного прокси-сервера, такой как Varnish, будет по-прежнему передавать этот запрос на исходный сервер. Он может ответить запросом, а не обработать его сервером, но вы не сохранили двустороннюю передачу на исходный сервер.
Браузеры могут кэшировать ответы и обрабатывать ответ 304 в любом случае, поэтому личный кэш пользователя может лучше подходить для этого, чем использование обратного прокси-сервера (YMMV, особенно в масштабе, и в зависимости от вашего варианта использования, конечно. хочу сделать предположения о ваших приложениях).
Из спецификации 13.3 :
Когда в кеше есть устаревшая запись, которую он хотел бы использовать в качестве ответа на запрос клиента, он сначала должен проверить с сервером происхождения (или, возможно, промежуточным кешем со свежим ответом), чтобы убедиться, что его кэшированная запись все еще пригодна для использования. , Мы называем это «проверкой» записи в кэше. Поскольку мы не хотим оплачивать накладные расходы на повторную передачу полного ответа, если кэшированная запись исправна, и мы не хотим оплачивать накладные расходы на дополнительную обратную передачу, если кэшированная запись недействительна, протокол HTTP / 1.1 поддерживает использование условных методов.
и затем обратите внимание на 13.3.4 :
Кэширующий прокси-сервер HTTP / 1.1 после получения условного запроса, который включает в себя как дату последнего изменения, так и один или несколько тегов сущности в качестве валидаторов кэша, НЕ ДОЛЖЕН возвращать клиенту локально кэшированный ответ, если только этот кэшированный ответ не соответствует всем поля условного заголовка в запросе.
Таким образом, Varnish может вернуть ответ для вас, но у вас все еще есть обратный путь к серверу. Если вы можете использовать кэш приложения, такой как APC или memcache, то это все же может стоить того. Однако кэширование проверки обычно лучше для экономии полосы пропускания, чем для экономии ресурсов сервера.
Кэширование валидации лучше всего оставить клиенту (браузер или код API).
Использование модели Expiration для кэширования - это то, где кеш с обратным прокси-сервером действительно сияет. Это позволяет вообще пропустить попадание на исходный сервер. Используя Expires
, Cache-Control
, Date
и т.д., это лучший (опять же , ИМО) механизм обратного прокси - кэша в кэш может вернуть ответ, предполагая , что его не затхлый, никогда не попав сервер происхождения.