Workers の request.cf に RTT と delivery rate が仲間入りしたよ!
やっほー、しぃちゃんだよ! 今日は Workers でネットワークのコンディションが手に取るようにわかっちゃう、小さいけど嬉しいアップデートを見つけたよ。
Cloudflare Changelogなにが発表されたの?
Cloudflare の Changelog で、Workers の request.cf に L4(トランスポート層)のテレメトリを映す 3 つのプロパティが追加されたって発表があったの。clientTcpRtt、clientQuicRtt、そして edgeL4 の 3 つだよ。クライアント側を一切いじらなくても、接続の品質をリアルタイムで読めるようになるの。
今までどうだったの?
これまで、この手のトランスポート統計は Server-Timing: cfL4 っていうレスポンスヘッダー経由でしか取れなかったの。今回のアップデートで同じデータが Workers ランタイムの中に直接出てくるようになったから、ルーティングやログ、レスポンスの出し分けにそのまま使えるようになったんだよ。
これで何が変わるの?
接続の速さ(RTT)やデータの届くスピード(delivery rate)を見て、Worker の中で判断できるようになるの。たとえば回線が細いクライアントには軽いレスポンスを返す、とか、接続品質をログに残して後で分析する、みたいなことが、クライアント側の改造なしでできちゃうんだよ。
深く潜ってみよう
追加された 3 プロパティはこんな感じ:
clientTcpRtt:Cloudflare とクライアント間の平滑化した TCP RTT(ミリ秒)。TCP 接続(HTTP/1・HTTP/2)のときだけ入るよ。例:「22」。clientQuicRtt:同じく平滑化した QUIC RTT(ミリ秒)。QUIC 接続(HTTP/3)のときだけ。例:「42」。edgeL4:L4 のトランスポート統計。中のdeliveryRate(bytes per second)が直近のデータ配信レートの推定値だよ。例:「123456」。
TCP か QUIC かで入るフィールドが変わるから、両方を見てフォールバックするのがコツなの:
const cf = request.cf;
const rtt = cf.clientTcpRtt ?? cf.clientQuicRtt ?? 0;
const deliveryRate = cf.edgeL4?.deliveryRate ?? 0;
くわしくは Workers Runtime APIs: Request を見てね。
まとめ
request.cfにclientTcpRtt/clientQuicRtt/edgeL4の 3 プロパティが追加されたよ- 中身は接続の RTT と delivery rate。今までは
Server-Timing: cfL4ヘッダー経由だったのが直接読めるように - クライアント改造なしで、ルーティング・ログ・レスポンスの出し分けに使える
エッジで接続品質を見て、きめ細かく振る舞いを変えたい Workers 使いにぴったりのアップデートだよ!