nginx 1.3.12 SPDY add_headers bug

Maxim Dounin mdounin at mdounin.ru
Tue Feb 12 01:49:32 UTC 2013


Hello!

On Mon, Feb 11, 2013 at 08:05:25PM +0000, Anatoly Mikhailov wrote:

> Добрый день,
> 
> Обновившись до Nginx 1.3.12 с версии 1.3.5 заметил, что Chrome перестал 
> брать из своего кэша (304) статику, которую отдаю таким образом:
> 
>  location ~ ^/(assets|images|javascripts|stylesheets|swfs|system)/ {
>    gzip_static       on;
>    expires           max;
>    add_header        Cache-Control public;
>    add_header        Last-Modified "";
>    add_header        ETag "";
> }
> 
> У нас SWF файлы размером более 1 мегабайта, которые подгружались один раз, 
> после чего браузерный кэш был очень кстати, поэтому мы отключали все лишние заголовки.
> Под Firefox 18 закэшированная статика по-прежнему отдается из браузерного кэша.
> Не уверен, но возможно что-то связано с обновлением SPDY.

У вас отключены оба возможных cache validator'а (Last-Modified, 
ETag), так что 304 с таким конфигом невозможно получить в 
принципе.  Chrome штатно пишет "(from cache)" вместо размера, если 
таки берёт ответ из кеша, именно туда и надо смотреть (ну или в 
логи nginx'а, чтобы уж совсем наверняка).

Погонял немного Chrome с подобным конфигом со spdy и просто по 
https - не вижу каких-либо проблем, равно как и существенных 
отличий в том, какие ответы берутся из кеша.  Отличия есть между 
http и https, но это выглядит как отличие в поведении браузера в 
зависимости от протокола (и как бы намекает, что не надо 
использовать https, даже со spdy, если хватает http).

Что до отключения "лишних заголовков" как о мере оптимизации - то 
это выглядит как странное заблуждение.  Заголовки позволяют 
браузеру проверить, что ресурс на сервере совпадает с тем, что у 
него в кеше, и соответственно ответ из кеша можно использовать.  
Без Last-Modified/ETag - браузеру в аналогичных ситуациях придётся 
просто загружать ответ заново, целиком.

-- 
Maxim Dounin
http://nginx.com/support.html



Подробная информация о списке рассылки nginx-ru