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

Playwright request.sizes()在缓存/Azure Blob请求中返回负responseBodySize是否正常?

关于Playwright request.sizes()返回负responseBodySize的问题

这种情况属于预期行为,原因对应你遇到的两种场景:

1. 缓存命中的请求

当资源直接从浏览器缓存读取时,没有发生实际的网络响应体传输。Playwright的request.sizes().responseBodySize统计的是通过网络接收的响应体字节数,缓存命中时这部分数据为0,但框架会用负值(通常是-1)明确标记“无网络传输”的状态,而非单纯返回0。

2. Azure Blob图片请求

这类场景出现负值通常和以下因素有关:

  • 范围请求(Range Requests):Azure Blob服务可能返回206 Partial Content状态码,响应体只是资源的一部分,Playwright统计这类分段响应时易出现数值异常。
  • 流式传输或响应头缺失:Blob图片的响应可能采用流式传输,或者服务端未返回准确的Content-Length头,导致Playwright无法完整统计响应体大小,最终返回负值。

处理建议

可以在代码中对负值情况做针对性处理:

  • 结合response.fromCache()判断缓存命中,将size设为0或标记为“来自缓存”。
  • 针对Blob或范围请求,检查响应状态码(如206),尝试从响应头的Content-Length或Content-Range字段计算实际大小,替代request.sizes()的结果。

修改后的代码示例

const handleRequest = async request => {
  const initiatorFrame = request.frame();
  const initiatorFrameUrl = initiatorFrame ? initiatorFrame.url() : "Unknown";
  const response = await request.response();

  if (response) {
    const responseSizes = await request.sizes();
    let size = responseSizes.responseBodySize;
    
    // 处理缓存命中的情况
    if (response.fromCache()) {
      size = 0;
    }
    // 处理负值异常
    else if (size < 0) {
      const contentLength = response.header("Content-Length");
      size = contentLength ? parseInt(contentLength) : 0;
    }

    const requestEntry = {
      method: request.method(),
      domain: new URL(request.url()).hostname,
      url: request.url(),
      size: size,
      status: response.status(),
      statusSuccess: response.ok(),
      fromServiceWorker: response.fromServiceWorker(),
      resourceType: response.request().resourceType(),
      frame: initiatorFrameUrl,
      fromCache: response.fromCache()
    };
    entries.push(requestEntry);
  } else {
    console.log("No response from ", request.url());
  }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 23:11:10