温馨提示:本文翻译自stackoverflow.com,查看原文请点击:http - Expected behavior when Clear-Site-Data header is set?
browser-cache cache-control http http-headers clear-site-data

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

发布于 2020-09-01 15:42:34

根据文档

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

现在尝试一下,您可以在屏幕截图(Firefox v76)中看到在“响应”部分中Clear-Site-Data已在浏览器中进行了设置,但是,您仍然可以看到资产为“已缓存”:

注意:即使在一段时间后导航后,缓存的资源似乎也不会清除。

在此处输入图片说明

我觉得这将立即发生,但我无法使其正常工作。这是应该立即发生还是在一段时间后发生,还是我只是想念其他一些?


对于那些关心的人的更新:

Clear-Site-Data似乎仅适用于localhosthttps

查看更多

提问者
IMB
被浏览
29
Joe 2020-05-15 17:31

这是应该立即发生还是在一段时间后发生,还是我只是想念其他一些?

它应该立即发生。(草稿)规范指出

如果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和击球Enter
  • 重复这个。请注意,所引用的内容style.css是从缓存中提供的,并且页面颜色不会更改

Clear-Site-Data

  • 获取index.html?clear通过输入URL和击球Enter
  • 重复这个。请注意,引用的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()