当前位置: 首页 > article >正文

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 字段指定响应的过期时间,表示缓存的过期日期和时间。

 运行示例:

 


http://www.kler.cn/a/411968.html

相关文章:

  • VsCode使用git提交很慢(一直显示在提交)_vscode commit很慢解决方法
  • 【Android+多线程】异步 多线程 知识总结:基础概念 / 多种方式 / 实现方法 / 源码分析
  • QT QToolButton控件 全面详解
  • 充满智慧的埃塞俄比亚狼
  • Redis设计与实现第14章 -- 服务器 总结(命令执行器 serverCron函数 初始化)
  • 【小白学机器学习34】用python进行基础的数据统计 mean,var,std,median,mode ,四分位数等
  • FastDFS基础概述与系统架构详解
  • GitLab CI 配置
  • 深入浅出 WebSocket:构建实时数据大屏的高级实践
  • AdaPipe:通过自适应重新计算和细粒度的计算单元划分
  • Linux KASLR
  • DAMODEL丹摩|丹摩平台:AI时代的开发者福音
  • 微信小程序+Vant-自定义选择器组件(多选
  • 【Zookeeper 和 Kafka】为什么 Zookeeper 不用域名?
  • 权限的相关内容
  • 昇思MindSpore第六课---Roberta Prompt Turning
  • c#异步编程(async/await)
  • 阿里云多账号统一认证
  • 玛哈特矫平机:精密制造中的平整大师
  • 多模态大型语言模型(MLLM)综述
  • 微信小程序数据请求教程:GET与POST请求详解
  • Centos 7 系统 openGauss 3.1.0 一主两备集群安装部署指南
  • vue config 接口地址配置
  • Sklearn 内置数据集简介
  • Vue ECharts 基本数据图表绘制详解:让数据飞起来
  • Vue前端开发2.3.2-4 绑定指令