我们可以用Content-Length
这种情况下的标头值。
谷歌的好人决定他们不会修复一些奇怪的错误 https://bugs.chromium.org/p/chromium/issues/detail?id=764946密切相关encodedDataLength
.
检查下面的代码和结果以查看证据。
page.on("request", async request => {
request.continue();
});
// Monitor using _client
page._client.on("Network.responseReceived", ({ response }) => {
console.log("responseReceived", [
response.headers["Content-Length"],
response.encodedDataLength
]);
});
page._client.on("Network.loadingFinished", data => {
console.log("loadingFinished", [data.encodedDataLength]);
});
// Monitor using CDP
const devToolsResponses = new Map();
const devTools = await page.target().createCDPSession();
await devTools.send("Network.enable");
devTools.on("Network.responseReceived", event => {
devToolsResponses.set(event.requestId, event.response);
});
devTools.on("Network.loadingFinished", event => {
const response = devToolsResponses.get(event.requestId);
const encodedBodyLength =
event.encodedDataLength - response.headersText.length;
console.log(`${encodedBodyLength} bytes for ${response.url}`);
});
Result without设置请求拦截:
responseReceived [ '606', 361 ]
loadingFinished [ 967 ]
606 bytes for http://example.com/
Result with设置请求拦截:
responseReceived [ '606', 0 ]
loadingFinished [ 0 ]
-361 bytes for http://example.com/
Tested with multiple gzip tool. Same result everywhere.
The Content-Length
从各个方面来说,头球都更加可靠。