defineContentEncodingHeaders function
void
defineContentEncodingHeaders(
- Map<
String, dynamic> headers, { - required APIContentEncoding encoding,
- required int bodyLength,
- required int compressedBodyLength,
- int? compressionCapacity,
- String? currentServerTiming,
- bool addCompressionRatioHeader = true,
- bool addServerTiming = true,
- DateTime? initTime,
- required String serverTimingEntryName,
Sets the Content-Encoding and Content-Length headers in headers
for a body compressed with encoding. Optionally adds:
X-Compression-Ratio: with detailed compression info (ratio (compressed/body)orratio (compressed/body/capacity)).Server-Timing: duration of the compression step (ifinitTimeis provided), appended tocurrentServerTiming(or to the currentserver-timingentry inheaders).
Implementation
void defineContentEncodingHeaders(
Map<String, dynamic> headers, {
required APIContentEncoding encoding,
required int bodyLength,
required int compressedBodyLength,
int? compressionCapacity,
String? currentServerTiming,
bool addCompressionRatioHeader = true,
bool addServerTiming = true,
DateTime? initTime,
required String serverTimingEntryName,
}) {
headers[HttpHeaders.contentEncodingHeader] = encoding.headerValue;
headers[HttpHeaders.contentLengthHeader] = compressedBodyLength.toString();
if (addCompressionRatioHeader) {
var compressionRatio = compressedBodyLength / bodyLength;
var compressionRatioStr = '$compressionRatio';
if (compressionRatioStr.length > 6) {
compressionRatioStr = compressionRatio.toStringAsFixed(4);
}
headers['X-Compression-Ratio'] = compressionCapacity != null
? '$compressionRatioStr ($compressedBodyLength/$bodyLength/$compressionCapacity)'
: '$compressionRatioStr ($compressedBodyLength/$bodyLength)';
}
if (addServerTiming && initTime != null) {
const headerServerTiming = 'server-timing';
var time = DateTime.now().difference(initTime);
var dur = time.inMicroseconds / 1000;
var serverTiming2 = StringBuffer();
var serverTiming =
currentServerTiming ?? headers[headerServerTiming]?.toString();
if (serverTiming != null && serverTiming.isNotEmpty) {
serverTiming2.write(serverTiming);
serverTiming2.write(',');
}
serverTiming2.write(serverTimingEntryName);
serverTiming2.write(';dur=');
serverTiming2.write(dur);
headers[headerServerTiming] = serverTiming2.toString();
}
}