Rails 3.1 на Apache, PageSpeed ​​говорит «Указать валидатор кэша» при использовании конфигурации Apache конвейера активов - PullRequest
3 голосов
/ 01 декабря 2011

Я вижу конфликт между тем, что предлагают руководства по Rails 3.1, и тем, что Google PageSpeed ​​предлагает для управления кэшированными активами.

Руководства по Rails 3.1 для конвейера активов предлагают решение для настройки сервера Apache здесь

Существенный бит конфигурации Apache:

<LocationMatch "^/assets/.*$">
  # Some browsers still send conditional-GET requests if there's a
  # Last-Modified header or an ETag header even if they haven't
  # reached the expiry date sent in the Expires header.
  Header unset Last-Modified
  Header unset ETag
  FileETag None
  # RFC says only cache for 1 year
  ExpiresActive On
  ExpiresDefault "access plus 1 year"
</LocationMatch>

Все работает, но когда я запускаю Google PageSpeed, он жалуется на то, что мне нужно «указать средство проверки кэша», задав либо Last-Modified, либо ETag, перечислив все файлы в папке ресурсов.

Комментирование Header unset Last-Modified удовлетворяет PageSpeed.

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

Кто-нибудь знает, что подходит?

1 Ответ

9 голосов
/ 02 декабря 2011

Этот код был вырезан и вставлен из исходного вспомогательного кода Rails по соображениям согласованности.(Это я его скопировал).

Я проверил по этому поводу Стив Соудерс (спасибо, Стив), и он сказал следующее:

Вы должны не unset Last-Modified.Я держу пари, что тот, кто написал это, нажал «Перезагрузить», чтобы провести их тестирование.Когда вы нажимаете «Обновить», вы явно указываете браузеру отправить условный запрос GET.(см. this )

У ETag та же проблема (если вы нажмете «Обновить», он отправит условный запрос GET).Но у него есть другая проблема, которая, вероятно, означает, что вы должны сбросить ETag.Проблема заключается в том, что синтаксис ETag по умолчанию в Apache и IIS вызывает ненужные сбои проверки и бесполезную передачу байтов.Вы должны либо настроить синтаксис для обхода этих проблем, но большинству людей проще просто сбросить ETag.(см. this )

Я обновлю документы по Rails!

...