Python脚本检测网站是否开启浏览器缓存配置
原理:
#检查 HTTP 响应头中的缓存相关字段来实现。HTTP 响应头中的 Cache-Control 和 Expires 字段会指示浏览器是否应缓存响应。
#Cache-Control 是浏览器缓存的关键字段之一。它可以指定缓存的有效性,比如 public, private, max-age 等值。
#Expires 字段指定响应的过期时间,表示缓存的过期日期和时间。
Cache-Control
头部字段允许服务器指定缓存策略,它比Expires
更强大且更加灵活。即使没有Expires
,只要存在Cache-Control
,通常就表示启用了缓存。
Cache-Control
的常见值:
max-age=<seconds>
:
- 这是
Cache-Control
中最常见的一个值,表示缓存的最大有效时间(单位是秒)。例如,Cache-Control: max-age=3600
表示该响应可以被缓存 3600 秒(1 小时)。- 这种方式实际上不需要
Expires
,因为max-age
已经指定了缓存的过期时间。
no-cache
:
- 表示响应不应该直接从缓存中提供,而应该重新验证。这个值不等于不缓存,实际上仍然会缓存,只是在使用缓存时会进行验证。
no-store
:
- 明确表示不允许缓存响应,所有的缓存会被禁用。
public
和private
:
public
表示响应可以被任何缓存(包括浏览器和 CDN)缓存。private
表示响应只能被用户的浏览器缓存,不能被共享缓存(如 CDN)缓存。
must-revalidate
:
- 表示在缓存过期后,必须再次验证缓存是否仍然有效。
proxy-revalidate
:
- 类似于
must-revalidate
,但是它只适用于代理缓存(例如 CDN 缓存)。
Cache-Control
的优势:
- 相对时间:与
Expires
使用固定的绝对时间(例如具体的日期和时间)不同,Cache-Control
使用相对时间(如max-age
)来定义缓存的过期时间,这样的定义更灵活,避免了由于服务器时间不一致造成的问题。- 更精细的控制:
Cache-Control
允许服务器对缓存策略做更精细的控制,像no-store
,public
,private
等都可以直接通过Cache-Control
来指定,而不需要依赖Expires
。- 支持条件请求:通过
Cache-Control
,服务器可以让客户端进行条件请求(例如If-Modified-Since
或If-None-Match
),以便在资源没有改变时避免重新下载,提升性能。
对比 Cache-Control
和 Expires
:
Cache-Control
(HTTP/1.1):
- 允许客户端和中间缓存(如代理服务器、CDN)灵活控制缓存策略。
- 使用相对时间(
max-age
)和其他指令(如no-cache
,public
,private
等)。- 更现代,支持更多缓存策略,控制粒度更细。
Expires
(HTTP/1.0):
- 只允许设置一个绝对时间(例如一个具体的日期),表示缓存的过期时间。
Expires
在 HTTP/1.1 中依然有效,但在处理上不如Cache-Control
灵活。
脚本源码:
安装request库:
pip install requests
脚本代码:
import requests
def check_browser_cache(url):
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}
try:
# 发送GET请求获取响应头
response = requests.get(url)
# 获取所有响应头
headers = response.headers
print(f"\nChecking cache headers for {url}:")
# 获取Cache-Control和Expires字段
cache_control = headers.get('Cache-Control', None)
expires = headers.get('Expires', None)
# 输出Cache-Control字段
if cache_control:
print(f"Cache-Control: {cache_control}")
else:
print("未发现Cache-Control.")
# 输出Expires字段
if expires:
print(f"Expires: {expires}")
else:
print("未发现Expires header.")
# 判断是否启用了浏览器缓存
if cache_control or expires:
print("\n已启用了浏览器缓存.")
else:
print("\n浏览器缓存未启用.")
except requests.RequestException as e:
print(f"\nError while checking {url}: {e}")
def main():
# 手动输入目标网站URL
url = input("输入网站地址: ").strip()
# 检查浏览器缓存
check_browser_cache(url)
if __name__ == "__main__":
main()
input("\n按任意键退出...")
#检查 HTTP 响应头中的缓存相关字段来实现。HTTP 响应头中的 Cache-Control 和 Expires 字段会指示浏览器是否应缓存响应。
#Cache-Control 是浏览器缓存的关键字段之一。它可以指定缓存的有效性,比如 public, private, max-age 等值。
#Expires 字段指定响应的过期时间,表示缓存的过期日期和时间。