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

Puppeteer技术问询:能否让Web服务器不发送指定资源?

解决方案:让服务器直接跳过非必要资源加载

你当前用请求拦截的方式只是在客户端放弃接收资源,但服务器其实已经完成了资源的准备和发送(或正在发送),没法从根源上减少响应时间。要让服务器直接不处理这些资源,可以试试以下几种方法:

1. 设置Save-Data请求头

Save-Data是标准化的HTTP请求头,用来告知服务器用户希望节省带宽,很多网站会识别这个头并自动跳过图片、视频等非核心资源的加载,或者返回压缩/低分辨率版本。

修改你的代码,在创建页面后添加自定义请求头:

var browser = await Puppeteer.LaunchAsync(options, null);
var page = await browser.NewPageAsync();

// 添加Save-Data请求头
await page.SetExtraHTTPHeadersAsync(new Dictionary<string, string>
{
    {"Save-Data", "on"}
});

// 可选:保留原有的请求拦截作为兜底
await page.SetRequestInterceptionAsync(true);
page.Request += (sender, e) => {
    switch (e.Request.ResourceType) {
        case ResourceType.Image:
        case ResourceType.ImageSet:
        case ResourceType.Media:
        case ResourceType.Font:
            e.Request.AbortAsync();
            break;
        default:
            e.Request.ContinueAsync();
            break;
    }
};

// 导航页面
var url = "https://...";
var timeout = 100000;
var response = await page.GoToAsync(url, timeout, 
    new WaitUntilNavigation[] { WaitUntilNavigation.Networkidle2 }
);

2. 限制Accept请求头

通过修改Accept头,只告诉服务器你需要的资源类型,比如只接受HTML、文本类资源,不接受图片、媒体等。这种方式需要服务器支持根据Accept头过滤响应内容:

await page.SetExtraHTTPHeadersAsync(new Dictionary<string, string>
{
    {"Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"}
});

注意:有些服务器可能忽略Accept头强制返回图片,所以这种方式兼容性不如Save-Data。

3. 模拟移动端无图模式

部分网站会根据设备类型或特定请求头判断是否返回图片,你可以模拟移动端并开启无图模式:

// 模拟iPhone设备
await page.SetUserAgentAsync("Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1");
// 设置视口
await page.SetViewportAsync(new ViewPortOptions { Width = 375, Height = 667 });
// 额外添加无图相关头(如果网站支持)
await page.SetExtraHTTPHeadersAsync(new Dictionary<string, string>
{
    {"X-Wap-Profile", "http://wap.sina.com.cn/profiles/uaprof/iphone.xml"}
});

关键说明

  • 这些方法的效果取决于服务器是否支持对应的请求头逻辑,如果服务器不识别Save-Data或Accept头,那还是只能靠客户端拦截来减少本地负载。
  • 建议优先使用Save-Data头,它是W3C标准化的方案,兼容性更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 05:43:22