Мне сложно решить, использовать ли встроенные ETags Apache или комбинацию Expires / Cache-Control для моих статических файлов (.js, .png и т. Д.).
Я использую односерверную установку, ничего особенного.
Я в основном понимаю, как все это работает, и у меня были запущены обе настройки, по ходу настраивая разные вещи.
Они кажутся очень похожими. Единственное различие, которое я могу найти, это то, что ETags Apache не позволяют вам определять количество времени до истечения срока действия компонентов. Кроме того, при использовании ETags я вижу новый запрос для каждого компонента, который дает 304, если файл не изменен.
По этим причинам я склоняюсь к комбинации Expires / Cache-Control, но что вы думаете о том, что использовать?
Это также зависит от того, как вы относитесь к своему статическому контенту. Я установил 10-летний срок действия для большинства своих статических файлов, но во всех случаях на них ссылаются из динамического содержимого с использованием формата строки запроса? Timestamp. Поскольку это более или менее идентично использованию ETag, который включает временную метку файла как часть тега, я бы рекомендовал для чисто статических конфигураций использовать ETags.
Также обратите внимание, что вы можете выбрать ETags сейчас, а затем переключиться. Это безвредно. Вы также можете использовать все разные методы вместе. Я считаю, что Ruby on Rails выполняет танец if-modified-Since, etags и cache-control, а также может смешивать и сопоставлять. Для конкретных статических конфигураций я не могу себе представить, что вам нужно делать их все, но делать больше одного вреда мало.
Я скажу, что очень сложно получить заголовок Expires далекого будущего из кешей, но остальное довольно просто. Это просто зависит от того, с каким объемом трафика вы готовы жить, поскольку наиболее сложное для удаления из удаленных кешей является лучшим с точки зрения эффективности трафика.
Это зависит от того, как часто ваши файлы меняются. Если они часто меняются, Expires
/Cache-Control
combo может вызвать задержку для ваших клиентов при получении нового содержимого. С другой стороны, ETag
обеспечивает повторную валидацию кеша по каждому запросу, что гарантирует, что ваши клиенты всегда будут получать самое новое содержимое.
Если у вас есть шанс использовать настройку с несколькими серверами, я предлагаю вам настроить FileETag
директива (удалите INode
вариант, по крайней мере), поскольку он может производить разные ETag
s на разных серверах.