2012-06-29 6 views
0

Я установил заголовки кеша в будущем (через 1 год) и отключил ETags, как рекомендовал YSlow (http://developer.yahoo.com/performance/rules.html#etags), но Google pagespeed кажется потребовать ETag (или последний-модифицированный) даже после того, как установлены кешированные заголовки.Почему google pagespeed просит указать ETag, даже если установлены заголовки кэша

«Важно указать один из Max-age Expires или Cache-Control и один из Last-Modified или ETag для всех кэшируемых ресурсов».

Эти два правила, похоже, противоречат друг другу.

ответ

4

YSlow не советует удалить ETags в целом, но и для некоторых сред. Если вы не используете ETags, вместо этого вы должны использовать Last-Modified.

ETag и Last-Modified предназначены для условных GET-запросов когда повторно, запрашивающей уже кэшируются и, возможно, истек ресурс.

Cache-Control max-age для определения срок действия кеш-кода действителен точно, не спрашивая снова. (Когда истек это правило, то браузер сделает условный GET ...)

Так что в вашем случае:

  • Browser кэширование ресурса в течение одного года. В течение этого года запрос на этот ресурс вообще не делается. Он напрямую обслуживается из локального кеша. (использует настройки заголовка Cache-Control.)
  • Браузер выполняет условный запрос после истечения одного года, чтобы проверить, что-то изменилось. Сервер отвечает HTTP 304 и пустым телом, когда ничего не изменилось. Браузер продолжает использовать свой кешированный элемент в этом случае без необходимости повторной передачи. (Использует параметры заголовка ETag и/или Last-Modified)

(браузер может или не может уважать ваши данные. Например, возможно, что браузер будет делать условный запрос, даже если один год не был еще истекло.)

Для сайтов с высокой оптимизацией Cache-Control гораздо важнее, поскольку вы устанавливаете его в будущих заголовках expa и просто изменяете URL-адрес ресурса в случае его изменения. В то время как это предотвращает использование условных Запросов, это дает вам возможность быть экстремально агрессивным при определении заголовка expires, имея возможность одновременно обслуживать новые версии ресурса всем. Это связано с тем, что новый URL-адрес кажется новым ресурсом в представлении браузера.

Для Java существует инфраструктура под названием jawr, которая использует эти и другие концепции без негативного влияния на разработку вашего сайта.

+0

Хороший ответ, но что более важно здесь. Добавление нескольких байтов в заголовке ответа для каждого запроса, чтобы избежать полной загрузки содержимого через 1 год? Скорее всего, большинство пользователей очистили свой кеш не реже одного раза в год. Даже есть лучший шанс, что сайт не использует те же ресурсы, что и год назад. – Rajiv

+0

На взгляд клиента: Ну, у вас есть эти дополнительные байты только для ** одного ** ответа для ресурса, который будет кэшироваться тогда. Когда кеш браузера истек или он предпочитает обновлять свой кеш раньше, это может быть сделано с условным запросом. Это зависит от ресурса, но очень вероятно, что дополнительные поля заголовка из ** одного ** ответа и ** одного ** условного запроса меньше кэшированного ресурса. И тогда вы выиграли с настройкой ETag или Last-Modified. Я согласен с тем, что имеет смысл отбросить их для небольших ресурсов VEEERY, которые меньше этих двух полей заголовка. –

+0

Когда есть хорошая вероятность, что сайт изменил ресурс в течение максимального времени Cache-Control, тогда он не был настроен должным образом. Максимальный возраст Cache-Control указывает, как долго действителен кешированный ресурс ** **. –

0

ETag и Cache-Control заголовки не являются исключительными. Причина, по которой ссылка, на которую вы ссылаетесь, рекомендует удалять ETags, - это уменьшить размер заголовков HTTP, что в лучшем случае поможет вам сохранить несколько байтов. Вот случай использования, где и почему до сих пор имеет смысл иметь как:

  • Вы обеспечиваете application.js с одной недели даты истечения срока, и ETag отпечатков пальцев
  • Неделя проходит, пользователь приходит на ваш сайт: файл имеет expired, и браузер отправляет условный запрос, если файл не был изменен, браузер может решить пропустить запрос файла полностью. (Last-Modified работы тоже)

Если вы не обеспечивают ETag или Last-Modified, браузер имеет запрашивать и загружать весь файл.

Хорошо родственный ресурс: https://developers.google.com/speed/articles/caching

+0

Основная причина, упомянутая на связанном сайте, чтобы не использовать 'ETag', является его конфигурацией по умолчанию на серверах Apache и IIS и проблемами с этой конфигурацией по умолчанию в многосерверной среде. Таким образом, вам нужно правильно настроить «ETag» самостоятельно или полностью удалить его. Чем меньше размер заголовка, тем больше побочный эффект, но не должен быть причиной удаления «ETags». –