You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Invoke-WebRequest下载S3文件时的缓存问题解决方法

问题描述

我需要从AWS S3托管站点下载一个约100字节的JSON格式文本文件filex-latest-info.txt到AWS EC2上的Windows服务器,文件内容示例如下:

{
    "checksum":  "29CE7AB1669E25E5183E80DDC69152C198F5C7CFB243682238C78A16927B32EA",
    "version":  "1.0.2",
    "name":  "filex-v1.0.2.zip"
}

我使用PowerShell的Invoke-WebRequest命令下载该文件,用于后续获取对应zip包,但遇到了缓存问题,推测由PowerShell或AWS相关机制导致。当前使用的命令是:

$response = Invoke-WebRequest -uri https://download.noyoucant.com/beta/installers/filex-latest-info.txt -headers @{"Cache-Control"="no-cache"} -UseBasicParsing

缓存问题具体表现:

  • 此前周六凌晨出现缓存问题,周一自动恢复;
  • 30分钟前更新文件后问题重现,但另一台周五后未执行过查询的机器能获取到最新版本;
  • 无论以普通用户还是NT_Authority系统账户运行命令,均会出现该问题;系统账户必须使用-UseBasicParsing参数(IE未初始化),交互模式下该参数不影响结果。

现需解决:是否有其他PowerShell配置或请求头可解决此缓存问题?

解决方案
  • 强化缓存控制请求头,覆盖多层缓存规则:

    $headers = @{
        "Cache-Control" = "no-cache, no-store, must-revalidate"
        "Pragma" = "no-cache"
        "Expires" = "0"
    }
    $response = Invoke-WebRequest -uri "https://download.noyoucant.com/beta/installers/filex-latest-info.txt" -Headers $headers -UseBasicParsing
    

    说明:no-store禁止任何层级的缓存存储资源,must-revalidate强制验证资源有效性,Pragma兼容旧系统缓存逻辑,Expires=0强制响应立即过期,组合使用可最大化避免缓存命中。

  • 添加随机查询参数绕过URL缓存:
    在URL末尾追加唯一随机值,让每次请求的URL视为新资源,彻底绕过基于URL的缓存机制:

    $cacheBustParam = [Guid]::NewGuid().ToString()
    $targetUri = "https://download.noyoucant.com/beta/installers/filex-latest-info.txt?cb=$cacheBustParam"
    $response = Invoke-WebRequest -uri $targetUri -UseBasicParsing
    
  • 配置WebSession强制禁用本地缓存:
    通过自定义WebSession的缓存策略,明确要求PowerShell不使用任何本地缓存:

    $webSession = New-Object Microsoft.PowerShell.Commands.WebRequestSession
    $webSession.CachePolicy = [System.Net.Cache.RequestCachePolicy]::new([System.Net.Cache.RequestCacheLevel]::NoCacheNoStore)
    $response = Invoke-WebRequest -uri "https://download.noyoucant.com/beta/installers/filex-latest-info.txt" -WebSession $webSession -UseBasicParsing
    
  • 检查S3对象的缓存元数据:
    登录AWS控制台确认filex-latest-info.txt对象的Cache-Control元数据,建议设置为max-age=0, no-cache, no-store, must-revalidate,从源端确保响应不被下游缓存。

内容的提问来源于stack exchange,提问作者Joseph Willcoxson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 08:00:57