设置 Clear-Site-Data header 时的预期行为?
Expected behavior when Clear-Site-Data header is set?
根据 docs:
Clear-Site-Data header clears browsing data (cookies, storage, cache) associated with the requesting website
现在尝试一下,您可以在屏幕截图 (Firefox v76) 中看到,在响应部分,在浏览器中设置了 Clear-Site-Data
,但是,您仍然可以看到资产为 "cached" :
注意:即使在导航 back/forth 一段时间后,缓存的资产似乎也没有被清除。
我的印象是这会立即发生,但我无法让它工作。这是应该立即发生还是在一段时间后发生,或者我只是错过了其他一些?
更新给关心的人:
Clear-Site-Data
似乎只适用于 localhost
或 https
Is this suppose to happen instantly or after some time, or I am just missing some else?
它应该会立即发生。 (草稿)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.
此外,正如您在 this comment 中提到的,仅当请求是安全的(https
或 localhost
)时才支持它。
我准备了一个简单的测试,有两个资源:
index.html
-- 链接到 CSS 文件的页面,还接受 ?clear
查询参数以包含 CSD
header回应
style.css
-- 具有随机颜色的 CSS 页面,以表明它何时重新生成,并声明自己为可缓存的
这符合 Firefox 76.0.1 的规定;在使用 Clear-Site-Data: "cache"
接收资源时,在获取其子资源之前清除缓存。
没有Clear-Site-Data
:
- 通过输入 URL 并按 Enter
来获取 index.html
- 重复这个。请注意,引用的
style.css
是从缓存中提供的,页面颜色不会改变
与Clear-Site-Data
:
- 通过输入 URL 并按 Enter
来获取 index.html?clear
- 重复这个。请注意,引用的
style.css
不是 从缓存中提供的,并且页面颜色更改
代码:
#!/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()
根据 docs:
Clear-Site-Data header clears browsing data (cookies, storage, cache) associated with the requesting website
现在尝试一下,您可以在屏幕截图 (Firefox v76) 中看到,在响应部分,在浏览器中设置了 Clear-Site-Data
,但是,您仍然可以看到资产为 "cached" :
注意:即使在导航 back/forth 一段时间后,缓存的资产似乎也没有被清除。
我的印象是这会立即发生,但我无法让它工作。这是应该立即发生还是在一段时间后发生,或者我只是错过了其他一些?
更新给关心的人:
Clear-Site-Data
似乎只适用于 localhost
或 https
Is this suppose to happen instantly or after some time, or I am just missing some else?
它应该会立即发生。 (草稿)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.
此外,正如您在 this comment 中提到的,仅当请求是安全的(https
或 localhost
)时才支持它。
我准备了一个简单的测试,有两个资源:
index.html
-- 链接到 CSS 文件的页面,还接受?clear
查询参数以包含CSD
header回应style.css
-- 具有随机颜色的 CSS 页面,以表明它何时重新生成,并声明自己为可缓存的
这符合 Firefox 76.0.1 的规定;在使用 Clear-Site-Data: "cache"
接收资源时,在获取其子资源之前清除缓存。
没有Clear-Site-Data
:
- 通过输入 URL 并按 Enter 来获取
- 重复这个。请注意,引用的
style.css
是从缓存中提供的,页面颜色不会改变
index.html
与Clear-Site-Data
:
- 通过输入 URL 并按 Enter 来获取
- 重复这个。请注意,引用的
style.css
不是 从缓存中提供的,并且页面颜色更改
index.html?clear
代码:
#!/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()