跳到主要内容
流量与成本 · MOOPROXY FIELD NOTES

代理流量为什么比文件大?GB、重试和浏览器请求详解

保存了一个 1 MB 文件,不等于代理只传输了 1 MB。先把单位、请求范围和重试次数对齐,再判断流量是否异常。

一次网页访问的流量从哪里来?;主文档 + 子资源;HTML / CSS / JavaScript / 图片 / 字体;再加上额外请求;上传 + 跳转 + 轮询 + 已传输的重试数据
示意图由 MooProxy 原创。主题插画:OpenMoji · CC BY-SA 4.0 (未修改)

先统一 GB 与 GiB 的口径

十进制 1 GB = 1,000,000,000 字节;二进制 1 GiB = 1,073,741,824 字节。同一批字节,用前者除得出的数值会更大:1 GiB 约等于 1.074 GB。界面上写 GB 的软件不一定都使用同一个除数,因此不要直接拿两个界面的数字相减。

核对账单时,优先拿原始字节数和明确的换算规则比较。本文解释通用测量方法,具体套餐的扣量单位、上下行范围和倍率以产品实际规则及账户记录为准,不把某个客户端指标当作结算承诺。

文件大小不是完整的网络账单

打开一个页面通常还会获取样式、脚本、图片、字体和接口数据;随后可能发生自动刷新、视频预加载、WebSocket 通信或轮询。保存的 HTML 文件不包含这些请求。下载失败也可能已传输了部分响应,不能仅凭“没有成功保存文件”判断没有产生流量。

看到的指标 包含什么 常见遗漏
本地文件大小 最终保存的内容 其他资源、上传、失败尝试
curl size_download 响应主体传输字节,不含响应头 上传、头部及其他连接
浏览器资源大小 依具体列显示解压后或传输大小 页面外请求、不同缓存口径
代理侧记录 按服务的计量规则统计 不应假设等于其中某个客户端值

curl 文档明确区分 size_download、size_header 和 size_upload;--compressed 下解压后输出的大小也可能不同。[1] HTTP 的 Content-Encoding 描述了内容编码方式,gzip 或 br 不会让所有类型的数据都按同一比例缩小。[2]

一个能自己复算的预算例子

假设一次任务的主文档及所需子资源共传输 2.0 MB,执行 1,000 次:基础下载约 2,000 MB。再假设其中 100 次重试,每次重试额外传输 1.5 MB,则增加 150 MB,合计 2,150 MB;还未包括上传、头部及服务规则内的其他数据。

这是算术示例,不是 MooProxy 实测,也不是每个网页的固定消耗。若失败都发生在返回主体前,重试增加的数据会更少;若每次都接近下载完成才失败,则会更多。

估算传输量 = 成功尝试的数据
           + 失败尝试中已经传输的数据
           + 必要的后台请求和上传
每条有效结果成本 = 该批次实际费用 / 有效结果数量

按这个顺序定位异常消耗

  1. 选择一个独立账号或测试时段,暂停同账号其他任务,记录余额与时间。
  2. 只执行一轮小样本,固定地区、任务数量和页面等待条件。
  3. 在 Network 面板或应用日志中检查请求数、资源类型、重定向和重试。
  4. 等待后台计量更新后再读余额,确认单位与倍率口径。
  5. 逐项改变设置再复测,不同时修改并发、图片和会话模式。

在共享账号仍持续跑任务时,对比两次余额无法分离这一批测试的用量。实时流量上报也可能有延迟,应保存完整测试时间窗口。

三个更有效的优化动作

  • 减少不需要的请求:文本任务可尝试不加载图片或视频,但必须验证目标数据仍完整;截图任务通常不能这样处理。
  • 控制失败放大:将连接错误、认证失败和目标限流分别处理,避免对固定错误无限重试。
  • 检查复用和缓存:连接池可减少连接开销,缓存可减少重复资源;Playwright 的请求拦截会禁用 HTTP 缓存,需要测量取舍。

把“更少流量”和“结果正确”一起验收。只看费用降低,可能得到缺字段、没渲染完或需要重跑的数据,最终成本反而更高。

参考资料与编辑说明

资料核对:2026-10-19。本文为官方文档基础上的原创整理;代码为配置示例,不代表生产性能承诺。

  1. curl: write-out variables
  2. MDN: Content-Encoding
  3. NIST: prefixes for binary multiples
  4. Playwright: BrowserContext.route

准备好验证你的连接了吗?
从控制台生成配置,按指南完成小样本测试。

打开控制台