Одним из приемов создания быстрых и быстро загружаемых веб-страниц является установка правильного заголовка «Срок действия» на веб-страницах и статических ресурсах, таких как изображения, файлы CSS и Javascript. Установив срок действия в будущем, вы можете указать браузеру кэшировать ресурс локально в кеше браузера. В этой статье обсуждается, как ускорить ваше веб-приложение на Java, установив оптимальную дату истечения срока действия для использования кэширования браузера .
Пример заголовка даты истечения срока действия выглядит следующим образом:
Expires: Wed, 27 Oct 2010 19:02:24 EDT
Самый простой способ установить дату истечения срока действия в веб-приложениях Java — через фильтр сервлетов. Фильтры сервлетов — это классы Java, которые расширяют класс javax.servlet.Filter. Фильтры сервлетов — это элегантный способ перехватывать каждый запрос и делать что-то полезное, в этом случае добавьте HTTP-заголовок.
Я написал фильтр сервлетов, который можно использовать для установки даты истечения срока действия на любой странице вашего веб-приложения. Вы можете использовать этот фильтр сервлетов для установки заголовка даты истечения срока действия без написания кода Java в вашем проекте. Вы также можете выбрать, какие страницы установить дату истечения срока действия и возраст страницы через файл свойств.
1. Скачайте код фильтра даты окончания срока действия и добавьте его в свой проект
Загрузите файл PageExpiryFilter.java и добавьте его в свой проект.
2. Добавьте фильтр сервлетов в web.xml и сопоставьте его со всеми URL
<filter>
<filter-name>PageExpiryFilter</filter-name>
<filter-class>com.vineetmanohar.web.PageExpiryFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>PageExpiryFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3. Создайте файл ‘expires.property’ в src / main / resources
Создайте следующий файл:
src/main/resources/expires.properties
Вы можете установить срок действия для всех или некоторых путей в вашем веб-приложении, просто создавая записи в этом файле
Формат для каждой строки:
Формат:
путь к ресурсу = интервал обновления для этого ресурса
Шаблон:
<полное регулярное выражение ресурса> = <число> <единица>
Допустимые значения для единицы :
- м за минуту
- ч в час
- д за день
- Вт на неделю
- М за месяц
Важный
- Порядок в файле свойств важен. Первое подходящее правило применяется, и больше правил не проверяется.
- Если правила не совпадают, срок действия не устанавливается.
- Путь к ресурсу относительно корня приложения сопоставляется с регулярным выражением. Поэтому, если вы используете baseurl http: // foobar / somewebapp, путь к ресурсу http: //foobar/somewebapp/images/logo.png будет /images/logo.png.
Пример 1:
^/css/.* = 30d
^/js/.* = 15d
^.*\.png$ = 2M
- В первой строке указано, что весь контент, начинающийся с / css, истекает через 30 дней после текущей даты.
- Во второй строке указано, что весь контент, начинающийся с / js, истекает через 15 дней после текущей даты.
- В третьей строке указывается, что весь контент, заканчивающийся на .png, истекает через 15 дней после текущей даты.
- Для тех, кто менее знаком с регулярным выражением, ^ обозначает начало строки, а $ обозначает конец строки. Смотрите полную ссылку на регулярные выражения .
Пример 2: Для страниц, которые не сильно меняются, вы можете установить меньшую дату истечения, например, 4 часа. Это всего лишь пример, вы должны изучить природу вашего веб-приложения, прежде чем выбрать возраст страницы.
Пример 3: В зависимости от того, насколько агрессивным вы хотите быть, вы можете установить дату истечения срока действия по умолчанию для всех страниц. Это может не подходить во всех случаях, когда страницы часто меняются, и вы хотите, чтобы браузер всегда загружал последнюю страницу. Не используйте это, если вы не понимаете это полностью.
.* = 1h
Как проверить заголовок даты истечения срока действия через браузер
Есть много инструментов, которые позволяют вам проверять значения заголовков HTTP. Мой личный фаворит — Firebug , который является плагином Firefox. Открыв firebug, перейдите к консоли «Net» и просмотрите свою страницу. Вы должны увидеть запрос GET или POST в виде строки на консоли. Разверните эту строку и перейдите на вкладку «Заголовки». Вы должны увидеть все заголовки, включая заголовки «Expires», если они есть.
На следующем снимке экрана показана сетевая консоль Firefug с заголовками HTTP от www.cnn.com. Обратите внимание, что срок действия домашней страницы www.cnn.com составляет всего 1 минуту. Это позволяет браузеру кэшировать страницу в течение 1 минуты и повторно загружать страницу через 1 минуту. Хотя это подходит для cnn.com, где контент может меняться каждую минуту, вы должны определить срок действия вашего веб-сайта в зависимости от того, как часто контент меняется.
Я настоятельно рекомендую получить Firebug и посмотреть срок действия вашего веб-приложения. Firebug также показывает, что загружается каждый раз, когда вы запрашиваете страницу, и что загружается из кеша. Это может помочь вам определить ваши требования, например, если вы замечаете, что статический ресурс (файл javascript или файл css) загружается в каждом запросе, вы можете добавить заголовок даты истечения срока действия для этого ресурса.
Вывод
Установка срока действия в будущем позволяет локально кэшировать страницы браузера пользователя, что приводит к быстрой загрузке страниц и повышению удовлетворенности конечных пользователей. Методика, описанная в этой статье, позволяет веб-приложениям Java очень легко устанавливать дату окончания срока действия без написания кода Java. Однако имейте в виду, что установка длинной даты истечения срока действия может быть неправильным решением во многих случаях, например, когда важна свежесть контента или есть последствия для безопасности.
Рекомендации
- Источник PageExpiryFilter.java в Google Code
- Ссылка на регулярное выражение
- Руководство по оптимизации страницы Google для заголовка Expiry и кэширования браузера
связанные с
С http://www.vineetmanohar.com/2010/10/java-expiry-date-header/