in src/plugins/network.ts [185:272]
private async _onResponse(response: Response) {
const request = response.request();
const networkEntry = this._findNetworkEntry(request);
if (!networkEntry) return;
networkEntry.responseReceivedTime = epochTimeInSeconds();
networkEntry.response = {
url: response.url(),
status: response.status(),
statusText: response.statusText(),
headers: {},
mimeType: 'x-unknown',
redirectURL: networkEntry.response.redirectURL,
};
// Gather all resource timing information up until the
// TTFB(Time to first byte) is received
const timing = request.timing();
const blocked =
roundMilliSecs(
firstPositive([
timing.domainLookupStart,
timing.connectStart,
timing.requestStart,
])
) || -1;
const dns =
timing.domainLookupEnd !== -1
? roundMilliSecs(timing.domainLookupEnd - timing.domainLookupStart)
: -1;
const connect =
timing.connectEnd !== -1
? roundMilliSecs(timing.connectEnd - timing.connectStart)
: -1;
const ssl =
timing.secureConnectionStart !== -1
? roundMilliSecs(timing.connectEnd - timing.secureConnectionStart)
: -1;
const wait =
timing.responseStart !== -1
? roundMilliSecs(timing.responseStart - timing.requestStart)
: -1;
networkEntry.timings = {
blocked,
dns,
ssl,
connect,
send: 0, // not exposed via RT api
wait,
receive: -1, // will be available after full response is received
total: -1,
};
this._calcTotalTime(networkEntry, timing);
const frame = this._nullableFrameBarrier(request);
const page = frame?.page();
this._addBarrier(
page,
request.allHeaders().then(reqHeaders => {
networkEntry.request.headers = reqHeaders;
networkEntry.request.referrer = reqHeaders?.referer;
})
);
this._addBarrier(
page,
response.allHeaders().then(resHeaders => {
networkEntry.response.headers = resHeaders;
const contentType = resHeaders['content-type'];
if (contentType)
networkEntry.response.mimeType = contentType.split(';')[0];
})
);
this._addBarrier(
page,
response.serverAddr().then(server => {
networkEntry.response.remoteIPAddress = server?.ipAddress;
networkEntry.response.remotePort = server?.port;
})
);
this._addBarrier(
page,
response.securityDetails().then(details => {
if (details) networkEntry.response.securityDetails = details;
})
);
}