New L4 transport telemetry fields in Workers
Three new properties are now available on request.cf in Workers that expose Layer 4 transport telemetry from the client connection. These properties let your Worker make decisions based on real-time connection quality signals — such as round-trip time and data delivery rate — without requiring any client-side changes.
Previously, this telemetry was only available via the Server-Timing: cfL4 response header. These new properties surface the same data directly in the Workers runtime, so you can use it for routing, logging, or response customization.
| Property | Type | Description |
|---|---|---|
clientTcpRtt |
number | undefined | The smoothed TCP round-trip time (RTT) between Cloudflare and the client in milliseconds. Only present for TCP connections (HTTP/1, HTTP/2). For example, 22. |
clientQuicRtt |
number | undefined | The smoothed QUIC round-trip time (RTT) between Cloudflare and the client in milliseconds. Only present for QUIC connections (HTTP/3). For example, 42. |
edgeL4 |
Object | undefined | Layer 4 transport statistics. Contains deliveryRate (number) — the most recent data delivery rate estimate for the connection, in bytes per second. For example, 123456. |
export default {
async fetch(request) {
const cf = request.cf;
const rtt = cf.clientTcpRtt ?? cf.clientQuicRtt ?? 0;
const deliveryRate = cf.edgeL4?.deliveryRate ?? 0;
const transport = cf.clientTcpRtt ? "TCP" : "QUIC";
console.log(`Transport: ${transport}, RTT: ${rtt}ms, Delivery rate: ${deliveryRate} B/s`);
const headers = new Headers(request.headers);
headers.set("X-Client-RTT", String(rtt));
headers.set("X-Delivery-Rate", String(deliveryRate));
return fetch(new Request(request, { headers }));
},
};For more information, refer to Workers Runtime APIs: Request.