Clear-Site-Data如何中断爬虫会话?
参考资料
Clear-Site-Data如何中断爬虫会话?
Clear-Site-Data 如何中断爬虫会话?
1. 工作原理
Clear-Site-Data
是一个 HTTP 响应头,用于强制浏览器(或爬虫使用的浏览器引擎)清除存储的会话数据,包括:
Cookies(会话凭证)
LocalStorage / SessionStorage(本地存储)
Cache(缓存)
Execution Contexts(执行上下文,如 Service Workers)
当爬虫(如 Selenium、Playwright、Puppeteer)访问带有该响应头的页面时,浏览器会自动清除这些数据,导致:
会话失效(如登录状态丢失)
存储数据被清空(如爬虫依赖的临时数据)
爬取流程中断(需重新登录或初始化)
2. 操作示例
(1)服务器端设置(Node.js / Python / Nginx)
Node.js (Express)
const express = require('express'); const app = express(); app.get('/clear-session', (req, res) => { res.set('Clear-Site-Data', '"cookies", "storage", "cache"'); res.send('Session data cleared!'); }); app.listen(3000);
Python (Flask)
from flask import Flask, Response app = Flask(__name__) @app.route('/clear-session') def clear_session(): response = Response("Session data cleared!") response.headers['Clear-Site-Data'] = '"cookies", "storage", "cache"' return response if __name__ == '__main__': app.run(port=3000)
Nginx 配置
location /clear-session { add_header Clear-Site-Data '"cookies", "storage", "cache"'; return 200 "Session data cleared!"; }
(2)爬虫端的影响(以 Selenium 为例)
假设爬虫依赖 localStorage
或 cookies
维持会话:
from selenium import webdriver driver = webdriver.Chrome() driver.get("https://example.com/login") # 模拟登录并存储数据 driver.execute_script('localStorage.setItem("token", "abc123")') driver.add_cookie({"name": "session_id", "value": "xyz456"}) # 访问触发 Clear-Site-Data 的页面 driver.get("https://example.com/clear-session") # 检查数据是否被清除 print(driver.execute_script('return localStorage.getItem("token")')) # → null print(driver.get_cookie("session_id")) # → None
结果:
localStorage
和cookies
被清空,爬虫无法继续操作,需重新登录。
3. 适用场景
反爬虫:强制清除会话数据,使爬虫无法维持登录状态。
安全退出:用户注销时清理浏览器数据。
合规性:满足 GDPR 等数据清除要求。
4. 注意事项
仅对浏览器环境有效:低级别爬虫(如
requests
库)不受影响。需配合其他防护:如 IP 限制、验证码等增强效果。
通过 Clear-Site-Data
,网站可以主动中断依赖浏览器存储的爬虫会话,增加自动化爬取的难度。