1. Обзор
Для оптимизации сети некоторые веб-сайты позволяют браузерам кэшировать ресурсы, такие как CSS или JS, в локальном хранилище. Это позволяет браузерам сохранить сеть туда и обратно для каждого запроса.
Таким образом, кэширование ресурсов имеет жизненно важное значение для улучшения времени загрузки веб-страниц. Не менее важно очистить кэшированные данные, как только это не требуется. Например, если пользователь выходит из веб-сайта, браузеры должны удалить все данные сеанса из кэша.
Есть две основные проблемы с кэшированием данных браузеров дольше, чем это требуется:
- Современные веб-сайты используют богатый набор файлов CSS и JS, которые потребляют много памяти браузера
- Веб-сайты, которые кэшируют конфиденциальные данные, такие как сессионные файлы cookie, подвержены фишинговым атакам
В этом учебнике мы увидим, как http в Чистая-сайт-данные заголовок ответа помогает веб-сайтам в очистке локально хранящихся данных из браузеров.
2. Заголовок с четкими данными сайта
Так же, как Кэш-контроль заголовок, Чистая-сайт-данные является заголовком ответа HTTP. Веб-сайты могут использовать этот заголовок для инструктажа браузеров по удалению данных, кэшированных в локальном хранилище.
Для веб-сайтов, требующих проверки подлинности, Кэш-контроль заголовок обычно включен в /Вход ответ и позволяет браузерам кэшировать пользовательские данные. Аналогичным образом, веб-сайты включают Чистая-сайт-данные заголовок в /Логот ответ на очистить любые кэшированные данные, которые принадлежат этому пользователю.
На этом этапе важно понимать, что браузеры обычно классифицируют локальное хранилище на разные типы:
- Местное хранилище
- Хранение сеансов
- Печенье
Поскольку веб-сайты могут хранить данные в любом из этих типов, Очистить-сайт-данные позволяет указать целевое хранилище в заголовке:
- кэш – для удаления локально кэшированных данных и включает в себя как частные, так и общие кэши браузера
- печенье – для удаления данных, хранящихся в файлах cookie браузера
- складские – для очищения локального и сеансового хранения браузера
- исполнениеКонтексты – этот переключатель говорит браузеру перезагрузить вкладку браузера для этого URL
- * (звездочка) – удаляет данные со всех вышеперечисленных складских помещений
В результате Чистая-сайт-данные заголовок должен включать по крайней мере один из этих типов хранения:
Clear-Site-Data: "cache", "cookies", "storage", "executionContexts"
В следующих разделах мы реализуем проект /Логот службы весенней безопасности и включают в себя Чистая-сайт-данные заголовок в ответе.
3. Зависимость от Maven
Прежде чем мы напишем код, чтобы добавить Чистая-сайт-данные заголовок весной, давайте добавим весна-безопасность-веб- и весна-безопасность-конфиг зависимостей от проекта:
org.springframework.security spring-security-web 5.2.2.RELEASE org.springframework.security spring-security-config 5.2.2.RELEASE
4. ClearSiteDataHeaderWriter в весенней безопасности
Мы обсуждали ранее, что весна обеспечивает Кэшконтроль утилита класса, чтобы написать Кэш-контроль заготовки в ответ. Аналогичным образом, Spring Security предоставляет ClearSiteDataHeaderWriter класс, чтобы добавить заголовок в ответе HTTP легко :
@Configuration @EnableWebSecurity @EnableGlobalMethodSecurity(prePostEnabled = true) public class SpringSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.csrf() .disable() .formLogin() .loginPage("/login.html") .loginProcessingUrl("/perform_login") .defaultSuccessUrl("/homepage.html", true) .and() .logout().logoutUrl("/baeldung/logout") .addLogoutHandler(new HeaderWriterLogoutHandler( new ClearSiteDataHeaderWriter( ClearSiteDataHeaderWriter.Directive.CACHE, ClearSiteDataHeaderWriter.Directive.COOKIES, ClearSiteDataHeaderWriter.Directive.STORAGE))); } }
Здесь мы внедрили страницу входа и логотипа с Spring Security. В результате Весна добавит Чистая-сайт-данные заголовок в ответ на все /baeldung/logout запросы :
Clear-Site-Data: "cache", "cookies", "storage"
Если мы сейчас используем локон и отправить запрос https://localhost:8080/baeldung/logout , мы получим следующие заготовки в ответ:
{ [5 bytes data] < HTTP/1.1 302 < Clear-Site-Data: "cache", "cookies", "storage" < X-Content-Type-Options: nosniff < X-XSS-Protection: 1; mode=block < Cache-Control: no-cache, no-store, max-age=0, must-revalidate < Pragma: no-cache < Expires: 0 < Strict-Transport-Security: max-age=31536000 ; includeSubDomains < X-Frame-Options: DENY < Location: https://localhost:8080/login.html?logout < Content-Length: 0 < Date: Tue, 17 Mar 2020 17:12:23 GMT
5. Заключение
В этой статье мы изучили влияние кэширования браузерами критически важных пользовательских данных, даже если это не требуется. Например, браузеры не должны кэшировать данные после того, как пользователь вышел из веб-сайта.
Затем мы увидели, как http Чистая-сайт-данные заголовок ответа позволяет веб-сайтам заставлять браузеры очищать локально кэшированные данные.
Наконец, мы внедрили страницу logout в весенней безопасности с ClearSiteDataHeaderWriter добавить этот заголовок в ответ контроллера.
Как всегда, код доступен более чем на GitHub .