2016-11-07 8 views
0

Я включил кеширование на NginX (используя fastCGI).NginX не учитывает ETag

Мои динамические страницы не меняются очень часто, и я хотел бы, чтобы они хранились в кеше NginX, если они не изменились (я знаю, я мог бы создавать статические страницы вместо этого ... пусть говорят, что они все еще «динамический» по историческим причинам).

Когда мой сервер backend (Symfony 2) создает страницу, он добавляет в заголовок ответа параметры максимального возраста ETAG +.

Я бы хотел, чтобы браузер сохранял страницу в кеше в течение определенного времени. Как только это время истекло, я хочу, чтобы браузер отправил HTTP HEAD «If-None-Match» с предоставленным ETAG.

Если страница все еще присутствует в кэш-интерфейсе, я хочу, чтобы NginX отправил ответ 304 Not Modified.

Если страница больше отсутствует (я ее очистил вручную, если она была изменена) Я хочу, чтобы NginX пересылал запрос серверу backend, который отправляет ответ HTTP 200.

Без fastCGI кэш Я вижу, что параметр etag присутствует в заголовке ответа (панель отладки firefox). Но каждый раз, когда я перезагружаю страницу, я вижу ответ HTTP 200 вместо ответа HTTP 304.

С кэшем fastCGI ETag полностью исчезает из первоначального ответа HTTP 200. И каждая перезагрузка страницы приводит к HTTP 200 réponse (хотя параметр X-Fastcgi-Cache говорит мне, что это HIT)

Мои вопросы:

Почему браузер отправки запроса GET вместо HEAD, хотя ETag существует?

Почему ETag исчезает из ответа при включении кеша fastCGI на NginX?

Я совсем не привык к кешированию, поэтому мне может не хватать чего-то большого ....

Спасибо за вашу помощь

ответ

1

После расследования, причиной этих проблем является то, что Firefox устанавливает ETag как «слабый», когда страница будет получена в сжатом формате. Он делает это, добавляя дополнительную «W /» перед строкой ETag.

Это приводит Symfony не признавать ETag как такой же, как тот, отправленное ранее и, следовательно, ответ вместо HTTP HTTP 200 304.

Причина этой дополнительной слабой информации, кажется, что, когда ETag вычисляется до сжатия данных, это может привести к столкновению значений ETag и, следовательно, к странице, застрявшей в кеше, тогда как она должна быть обновлена. Чтобы предотвратить этот Firefox (а также NginX для информации), добавляется информация о слабой (ness).

Надеюсь, это поможет кому-то с той же проблемой ....

Смежные вопросы