设置Clear-Site-Data头时的预期行为?

问题描述 投票:1回答:1

根据 文件:

Clear-Site-Data头清除与请求网站相关的浏览数据(cookies,存储,缓存)。

现在试了一下,在截图中可以看到(Firefox v76),在响应部分。Clear-Site-Data 在浏览器中被设置为 "缓存",但是,你仍然可以看到资产为 "缓存"。

注: 即使在一段时间后回溯浏览,缓存的资产似乎也没有被清除。

enter image description here

在我的印象中,这种情况会立即发生,但我不能让它工作。这应该是即时发生的还是过一段时间后发生的,或者我只是错过了一些其他的东西?


更新为那些谁关心。

Clear-Site-Data 似乎只有在... localhosthttps

http caching http-headers browser-cache cache-control
1个回答
1
投票

这应该是瞬间发生的,还是经过一段时间后,或者我只是错过了一些其他的?

它应该是即时发生的。(草案) 规范声明:

如果 Clear-Site-Data 头存在于从网络接收到的HTTP响应中,那么在向用户呈现响应之前,数据必须被清除。

此外,正如你在 此话 只有当请求是安全的时,它才会被支持(要么是 httpslocalhost).

我准备了一个简单的测试,有两个资源。

  • index.html -- 一个链接到CSS文件的页面,同时接受一个 ?clear 查询参数中包含一个 CSD 头信息
  • style.css -- 一个带有随机颜色的CSS页面,以明确何时再生,并声明自己是可缓存的。

这与Firefox 76.0.1的规定一样;当收到一个带有 Clear-Site-Data: "cache"在获取其子资源之前,缓存会被清除。

如果没有 Clear-Site-Data:

  • 获取 index.html 通过输入URL并点击 进入
  • 重复上述步骤。请注意,引用的 style.css 是由缓存提供的,而且页面的颜色不会改变。

随着 Clear-Site-Data:

  • 获取 index.html?clear 通过输入URL并点击 进入
  • 重复上述步骤。请注意,引用的 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()
© www.soinside.com 2019 - 2024. All rights reserved.