我尝试使用这个API
https://developer.chrome.com/extensions/webRequest
和总结Content-Length字段,但它们似乎一直缺失。有可行的方法吗?
chrome.webRequest.onCompleted.addListener(function(data) {
console.log('Got request!', data);
var size = 0;
for (i = 0; i < data.responseHeaders.length; i++) {
var header = data.responseHeaders[i];
if (header.name === 'Content-Length') {
size += parseInt(data.responseHeaders[i].value);
break;
}
}
if (size > 0) {
chrome.runtime.sendMessage({
msg: 'traffic',
amount: size
}, function(resp) {})
}
}, {
urls: ["<all_urls>"]
}, ["responseHeaders"]);
结果是Content-Length标头总是丢失。
谢谢!
好问题,但webRequest
API当然不提供此类信息
事实上,由于大多数时候服务器只是在没有事先告知内容有多大的情况下将其推出,因此该信息唯一可用的点是在onCompleted
事件上。
快速浏览一下文档就不会发现这样的信息。
一般来说,webRequest
显示了比网络堆栈实际在做什么(消耗(更抽象的版本。所以这不适合这份工作。
为了进一步阐明这一点,这里引用了文档中的一句话,这句话部分相关:
请注意,web请求API向扩展提供了网络堆栈的抽象。在内部,一个URL请求可以拆分为多个HTTP请求(例如,从一个大文件中提取单个字节范围(,也可以由网络堆栈处理,而无需与网络通信。因此,API不提供发送到网络的最终HTTP头。例如,所有与缓存相关的头对于扩展来说都是不可见的。
以下标头当前未提供给
onBeforeSendHeaders
事件。这份清单既不能保证完整,也不能保证稳定。
- 内容长度
我认为对此没有任何合理的方法chrome://net-internals/#bandwidth
显示数据,但它不是通过API公开的(并且您不能从扩展访问该页面(。
可以通过开发工具扩展(可以访问网络事件(或chrome.debugger
API(通过不同的接口获得相同的数据(来获得特定页面的近似值。但它只能在";重新加载该页面以查看统计数据";场景,同样,将比网络级别上实际发生的事情更抽象。