每个Web请求传输的字节数

时间:2016-03-06 09:53:41

标签: javascript http firefox xmlhttprequest

执行XMLHttpRequest时,通常会压缩数据。看the Content-Length header

xhr.getResponseHeader("Content-Length");

为您提供响应正文中的八位字节数,您可以通过调整响应标题来添加标题的近似值。

但是:如何找到实际传输的(压缩)字节数?(在Firefox中,如果只能以特定于浏览器的方式实现这一点。)

在下面的屏幕截图中,您会看到几个文件的区别: different sizes transferred than received

以下都应该等于这个

  • 从套接字读取的字节数
  • squid日志中的文件大小
  • 响应请求通过网络发送的应用层八位字节的数量

2 个答案:

答案 0 :(得分:1)

只要响应是文本(而不是二进制blob),你就可以在SO上找到一些好的起点: Measure string length in bytes

答案 1 :(得分:0)

上面的屏幕截图显示了Network MonitorIts code似乎使用了network-monitor.js文件

  

实现nsIStreamListener和nsIRequestObserver接口。这在NetworkMonitor功能中用于获取请求的响应主体。

相关代码似乎是

  onProgress: function(request, context, progress, progressMax) {
    this.transferredSize = progress;
    // Need to forward as well to keep things like Download Manager's progress
    // bar working properly.
    this._forwardNotification(Ci.nsIProgressEventSink, "onProgress", arguments);
  },

  _onComplete: function NRL__onComplete(aData)
  {
    let response = {
      mimeType: "",
      text: aData || "",
    };

    response.size = response.text.length;
    response.transferredSize = this.transferredSize;

progress事件是两个接口的一部分。它可能来自xhr,但它来自哪里尚不清楚。