何を測っているの?
大手 CDN には数百の拠点(POP、データセンター)があります。どの拠点が応答するかで、その CDN 上のすべてのサイトの速さが決まり、しかも最寄りとは限りません。
ページはブラウザから各 CDN の小さなファイルを、サイトを開くときと同じように取得し、どの拠点が応答したかを読み取ります。そして拠点までの距離、往復時間、その距離で出せる最小値を表示します。
このサイトには何も送りません。リクエストはブラウザから各 CDN へ直接届きます。
拠点はどう読み取るの?
各 CDN は応答に拠点を書き込んでいます。書き方はそれぞれです:
Cloudflare:/cdn-cgi/trace の colo(HKG)。
Amazon CloudFront:Server-Timing の cdn-pop、または X-Amz-Cf-Pop(NRT57-P11)。
Akamai:Akamai-Request-BC、都市名で書かれます(JP_13_TOKYO)。
Fastly:X-Served-By(cache-nrt-…-NRT)。
Azure Front Door:X-Azure-Ref(…C1TYO…)。
Bunny:Server ヘッダー(BunnyCDN-JP1-…)。
Wikimedia:X-Cache。キャッシュサーバーの番号がデータセンターを表します。
ブラウザは応答が許可した場合しかこれらを読めないため、各 CDN は読み取りを許可している公開ファイルで測っています。Google、Alibaba Cloud、Tencent EdgeOne、Wangsu、Gcore、CDN77 は許可していないので、時間だけを測ります。
なぜ遠くの拠点につながるの?
CDN は距離で振り分けているわけではありません。Cloudflare や Akamai は同じアドレスを多くの場所から同時に広告したり(エニーキャスト)、DNS リゾルバーの場所で応答を変えたりしており、実際の経路は回線事業者が選びます。
中国本土ではよくあることで、Cloudflare の無料・低価格プランのサイトは、多くの回線で米国西海岸など遠い拠点に回されます。その経路のほうが安いからです。有料プランと China Network(JD Cloud と運営)は香港や中国本土の拠点が応答します。
プロキシや VPN でも拠点は変わります。CDN にはプロキシのアドレスが見え、その場所で振り分けます。
最小の往復時間とは?
光ファイバーの中で光は 1 ミリ秒に約 200 km 進むので、距離 d の往復は d ÷ 100 ミリ秒より速くなりません。実際の経路は直線の 1.5〜2 倍あります。往復時間がその 2 倍に 40 ms を足した値を大きく超えると「遠回り」と表示します。経路が迂回しているか、混雑した区間で待たされています。
「最寄りではない」とは?
全拠点を公開している CDN(Cloudflare、Bunny、Wikimedia)については、あなたに最も近い拠点を求めます。応答した拠点がそれより 1,000 km 以上、かつ 2 倍以上遠い場合に表示します。故障ではなく、CDN か回線事業者が別の経路を選んだということです。
サイトの調べ方は?
ドメインを入力すると、このサイトの Worker が Cloudflare の DNS で名前解決し(ローカルや改ざんされた応答に左右されません)、CNAME の向き先から CDN を判別します。さらにサイトの /cdn-cgi/trace で Cloudflare かを確かめ、サイトが許可していれば favicon の応答ヘッダーから拠点を読み取ります。最後にサイトまでの時間を測ります。
ドメインはこのサイトの Worker と Cloudflare の DNS に送られますが、どちらも保存しません。
現在地はどこから?
IP アドレスから Cloudflare が推定した場所です(このサイトは Cloudflare 上で動いています)。たいてい都市単位で合っていますが、数百 km ずれることもあり、プロキシを使っているとプロキシの場所になります。「正確な位置を使う」を押すとブラウザの位置情報を使い、ページ内だけで使われます。
データは収集される?
いいえ。リクエストはブラウザから各 CDN へ直接届き、CDN にはふつうのサイトと同じく IP アドレスが見えます。このサイトは何も保存しません。共有リンクには拠点と往復時間が入り、都市、その座標(約 10 km 単位)、回線事業者はチェックを入れたときだけ含まれます。IP アドレスは含まれません。コードは GitHub で公開しています。