Bootstrap

Python脚本检测网站是否开启浏览器缓存配置

原理:

#检查 HTTP 响应头中的缓存相关字段来实现。HTTP 响应头中的 Cache-Control 和 Expires 字段会指示浏览器是否应缓存响应。

#Cache-Control 是浏览器缓存的关键字段之一。它可以指定缓存的有效性,比如 public, private, max-age 等值。

#Expires 字段指定响应的过期时间,表示缓存的过期日期和时间。

Cache-Control 头部字段允许服务器指定缓存策略,它比 Expires 更强大且更加灵活。即使没有 Expires,只要存在 Cache-Control,通常就表示启用了缓存。

Cache-Control 的常见值:

  1. max-age=<seconds>

    • 这是 Cache-Control 中最常见的一个值,表示缓存的最大有效时间(单位是秒)。例如,Cache-Control: max-age=3600 表示该响应可以被缓存 3600 秒(1 小时)。
    • 这种方式实际上不需要 Expires,因为 max-age 已经指定了缓存的过期时间。
  2. no-cache

    • 表示响应不应该直接从缓存中提供,而应该重新验证。这个值不等于不缓存,实际上仍然会缓存,只是在使用缓存时会进行验证。
  3. no-store

    • 明确表示不允许缓存响应,所有的缓存会被禁用。
  4. publicprivate

    • public 表示响应可以被任何缓存(包括浏览器和 CDN)缓存。
    • private 表示响应只能被用户的浏览器缓存,不能被共享缓存(如 CDN)缓存。
  5. must-revalidate

    • 表示在缓存过期后,必须再次验证缓存是否仍然有效。
  6. 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-SinceIf-None-Match),以便在资源没有改变时避免重新下载,提升性能。

对比 Cache-ControlExpires

  1. Cache-Control(HTTP/1.1)

    • 允许客户端和中间缓存(如代理服务器、CDN)灵活控制缓存策略。
    • 使用相对时间(max-age)和其他指令(如 no-cachepublicprivate 等)。
    • 更现代,支持更多缓存策略,控制粒度更细。
  2. 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 字段指定响应的过期时间,表示缓存的过期日期和时间。

 运行示例:

 

;