Méně známá HTTP hlavička "Clear-Site-Data" dokáže být velmi užitečná. Umí totiž prohlížeči přikázat, aby smazal všechny stopy po návštěvě daného webu. To se hodí zejména při odhlášení uživatele.

Princip jejího fungování je jednoduchý. Server může s HTTPS odpovědí (celé to, stejně jako všechna nová API, funguje jenom přes HTTPS) poslat klientovi hlavičku Clear-Site-Data. Hodnotou této hlavičky mohou být následující tokeny, oddělené čárkami (pozor, uvozovky jsou součástí tokenu):

Název Význam
"cache" Experimentální. Položky v HTTP cache. Browser může vymazat i související věci, jako třeba návrhy v adresním řádku apod.
"cookies" Cookies pro doménu, ve které se nachází origin, a všechny její subdomény. Také HTTP autentizace (např. Basic Authentication).
"storage" Různé formy storage, např. Local/Session Storage, IndexedDB a další.
"executionContexts" Experimentální, nefunguje v Chrome et al. Refreshnout otevřené záložky na tomtéž originu.
"*" Nefunguje v Chrome et al. Všechna data, která lze smazat.

Co dobře funguje v současných prohlížečích, jsou hodnoty "cache", "cookies", "storage". Problém je s hodnotami "executionContexts" a "*". Jediný browser, který podle MDN podporuje hodnotu "executionContexts" je Samsung Internet Browser. Firefox sice tuto hodnotu neimplementuje, ale ignoruje ji. Problém je s browsery, které jsou založeny na jádře Chromium (tj. Chrome, Edge, Opera a spousta dalších). Ty totiž v případě, že je přítomna hodnota "executionContexts" nebo "*" ignorují celou hlavičku a nevymažou nic. Jedná se o známý bug, který je reportován již od roku 2018 a zatím (v srpnu 2023, kdy píšu tento článek) nebyl vyřešen.

Kdy a jak tuto hlavičku použít?

Typickým kandidátem pro použití této hlavičky je proces odhlášení uživatele. Kód (implementovaný pomocí Minimal API) pro odhlášení a smazání stop může vypadat například takto:

app.MapGet("/logout", async (HttpContext c, SignInManager<ApplicationUser> signInManager) => {
   // Sign out the user
   if (signInManager.IsSignedIn(c.User)) await signInManager.SignOutAsync();

   // Add the Clear-Site-Data header to the response
   // Do not use "*", due to a bug #898503 in Chromium-based browsers
   c.Response.Headers.Add("Clear-Site-Data", "\"cache\", \"cookies\", \"storage\"");

   // Redirect to the home page
   return Results.Redirect("/");
});

Pokud si chcete vyzkoušet jak to funguje, připravil jsem pro vás jednoduchou ukázkovou aplikaci, kde si můžete vyzkoušet mazání cookies a local storage.