Clear-Site-Data
Применение
Выкладка сломанного ресурса, ротация токенов аутентификации или выход пользователя из системы — все эти ситуации требуют удаления устаревших данных на стороне клиента. Просить пользователей очистить кэш вручную ненадёжно. Заголовок Clear-Site-Data даёт серверу декларативный способ удалить определённые категории сохранённых данных в одном ответе.
Заголовок принимает одну или несколько директив в виде строк в кавычках, указывающих, какие типы данных нужно очистить. Несколько директив разделяются запятыми. Подстановочный знак ”*” очищает всё, включая типы данных, добавленные в будущих редакциях спецификации.
Заголовок работает только по HTTPS. Браузеры игнорируют его в небезопасных ответах по HTTP. Область действия “cookies” распространяется на весь зарегистрированный домен и все поддомены: это означает, что ответ с Clear-Site-Data от example.re очищает также cookie, установленные с stage.example.re.
Распространённая схема внедрения — добавление заголовка к конечной точке выхода из системы. Сервер отвечает на запрос выхода заголовком Clear-Site-Data, чтобы за один проход удалить сессионные cookie, кэшированные ресурсы и локальное хранилище. Другая схема — выделенный URL для сброса кэша, временно обслуживаемый после неудачного развёртывания: он позволяет операторам принудительно перевести посетителей на свежие ресурсы, не дожидаясь истечения срока действия кэша.
Примечание
Отправка Clear-Site-Data в каждом ответе фактически отключает кэширование для всего сайта. Каждая загрузка страницы очищает кэш браузера, вызывая заметное падение производительности. Ограничьте заголовок целевыми ответами: конечными точками выхода, страницами восстановления после ошибок или временными URL для сброса кэша.
Примечание
Все основные браузеры поддерживают заголовок Clear-Site-Data. Safari поддерживает все директивы, кроме “executionContexts”, и применяет разделение по источникам, не позволяя межсайтовому iframe очищать данные первой стороны.
”cache”
Очищает HTTP-кэш браузера для данного источника. Некоторые реализации очищают и связанные кэши: предварительно отрисованные страницы, записи кэша навигации «вперёд-назад», кэши скриптов, кэши шейдеров WebGL и подсказки адресной строки.
”cookies”
Очищает все cookie для зарегистрированного домена и всех поддоменов. Также удаляет учётные данные HTTP-аутентификации, связанные с источником. Область действия шире, чем у других директив, поскольку сопоставление домена cookie включает родительские и соседние поддомены.
”storage”
Очищает DOM-хранилище для источника. Сюда входят localStorage, sessionStorage, базы данных IndexedDB, регистрации Service Worker, базы данных Web SQL (устаревшие), данные FileSystem API и данные плагинов.
”executionContexts”
Перезагружает все контексты просмотра для источника. Браузер выполняет эквивалент location.reload() в каждой открытой вкладке или фрейме, связанных с источником. Эта директива экспериментальная и реализована не повсеместно.
Расширения, специфичные для Chromium
Директивы “clientHints”, “prefetchCache” и “prerenderCache” — специфичные для Chromium расширения, не определённые в спецификации W3C Clear Site Data. Определённые спецификацией директивы — “cache”, “cookies”, “storage”, “executionContexts” и ”*”. Расширения Chromium работают только в браузерах на базе Chromium и не распознаются Firefox или Safari.
”clientHints”
Очищает сохранённые предпочтения клиентских подсказок, заданные через заголовок Accept-CH. Расширение, специфичное для Chromium. Очистка “cache”, “cookies” или ”*” также автоматически очищает клиентские подсказки.
”prefetchCache”
Очищает кэши предварительной загрузки Speculation Rules, ограниченные источником-реферером. Расширение, специфичное для Chromium. Полезно для отбрасывания устаревшего предзагруженного содержимого после изменения состояния, например входа в систему или выхода из неё. Заголовок с этой директивой работает в любом ответе HTTP в рамках того же сайта.
”prerenderCache”
Очищает кэши предварительной отрисовки Speculation Rules, ограниченные источником-реферером. Расширение, специфичное для Chromium. В паре с “prefetchCache” очищает все кэши спекулятивной загрузки. Приложение с отрисовкой на стороне клиента, получающее данные из JavaScript, использует “prerenderCache” при изменениях состояния, чтобы отбросить предварительно отрисованные страницы, сохранив при этом предзагруженный HTML.
”*” (подстановочный знак)
Очищает все типы данных для источника, включая любые будущие типы директив, добавленные в спецификацию. Самый безопасный выбор для полной очистки и при этом самый широкий по влиянию на работу пользователя в браузере.
Пример
Конечная точка выхода очищает сессионные cookie и хранилище. Браузер удаляет все cookie домена (включая поддомены), убирает данные localStorage и IndexedDB и сбрасывает кэшированные ресурсы.
Clear-Site-Data: "cache", "cookies", "storage"
Целевая очистка только кэша после неудачного развёртывания. Сервер временно добавляет этот заголовок к ответам, пока посетители не перейдут на свежие ресурсы.
Clear-Site-Data: "cache"
Полная очистка с использованием подстановочного знака. Удаляются все кэшированные данные, cookie, хранилища и любые будущие типы данных. Часто применяется на страницах подтверждения удаления учётной записи.
Clear-Site-Data: "*"
Очистка только кэшей спекулятивной загрузки после изменения состояния. Предзагруженные и предварительно отрисованные страницы, созданные до события входа, отбрасываются.
Clear-Site-Data: "prefetchCache", "prerenderCache"