Is this suppose to happen instantly or after some time, or I am just missing some else?
It is supposed to happen instantly. The (draft) spec states:
If the Clear-Site-Data
header is present in an HTTP response received from the network, then data MUST be cleared before rendering the response to the user.
Additionally, as you mention in this comment it is only supported when a request is secure (either https
or localhost
).
I prepared a simple test, with two resources:
index.html
-- a page that links to a CSS file, and also accepts a ?clear
query parameter to include a CSD
header in the response
style.css
-- a CSS page with random colours, to make clear when it has been regenerated, that declares itself as cacheable
This behaved as specified with Firefox 76.0.1; on receiving a resource with Clear-Site-Data: "cache"
, the cache is cleared before fetching its subresources.
Without Clear-Site-Data
:
- Fetch
index.html
by entering the URL and hitting Enter
- Repeat this. Note that the referenced
style.css
is served from the cache, and the page colour doesn't change
With Clear-Site-Data
:
- Fetch
index.html?clear
by entering the URL and hitting Enter
- Repeat this. Note that the referenced
style.css
is not served from the cache, and the page colour changes
Code:
#!/usr/bin/python3
import http.server
import socketserver
import random
PORT = 8000
class SampleDataHandler(http.server.SimpleHTTPRequestHandler):
def do_GET(self):
if ".css" in self.path:
self.send_response(200)
self.send_header('Content-Type', 'text/css')
self.send_header('Cache-Control', 'max-age=3600')
self.end_headers()
color = b"%06x" % random.randint(0, 0xFFFFFF)
self.wfile.write(b"html{background-color: " + color + b";}\n")
else:
self.send_response(200)
if '?clear' in self.path:
self.send_header('Clear-Site-Data', '"cache"')
self.end_headers()
self.wfile.write(b"<link rel=stylesheet href=style.css>This is the content.\n")
httpd = socketserver.TCPServer(("", PORT), SampleDataHandler)
httpd.serve_forever()