ioDeliveryFetch function
HttpClient 기반 DeliveryFetch. 재검증은 ETag로 직접 하므로 HTTP 캐시는 쓰지 않는다.
Implementation
DeliveryFetch ioDeliveryFetch({
Duration connectTimeout = const Duration(seconds: 10),
Duration readTimeout = const Duration(seconds: 15),
}) {
return (String url, {String? ifNoneMatch}) async {
final client = HttpClient()..connectionTimeout = connectTimeout;
try {
final request = await client.getUrl(Uri.parse(url));
if (ifNoneMatch != null) request.headers.set(HttpHeaders.ifNoneMatchHeader, ifNoneMatch);
final response = await request.close().timeout(readTimeout);
final body = await response.transform(utf8.decoder).join();
return DeliveryResponse(
response.statusCode,
body,
etag: response.headers.value(HttpHeaders.etagHeader),
);
} finally {
client.close(force: true);
}
};
}