URLを打ってから表示されるまで

上級の解説は準備中のため、上級の内容を表示しています。

概要 — まず全体をつかむ

中級では、初級の4段階を実際のプロトコル名で追い直しました。上級では、その各段を「何往復かかり、どう減らせるか」という性能とキャッシュの視点で端から端まで掘り下げ、さらにHTTPそのものの進化(1.1→2→3)まで踏み込みます。ここは通信経路(ネットワーク)の深掘りを担当します。

同じ1リクエストを、サービス全体のシステム構成(フロント・バック・DB・インフラの層や、規模に耐える工夫)の側から掘るのは 1リクエストの流れ 上級です。

アニメーション『パケットの旅』を開く
💻📱 あなたのPC・スマホの中ルーター(通り道)ブラウザOSDNSサーバWebサーバ
  • ブラウザあなたの代わりにページを取りに行く注文係
  • OS機械の中の世話役。外との通信はぜんぶここを通る
  • DNSサーバ名前から住所を調べてくれる案内所
  • Webサーバページの材料を持っているお店
  • ルーター(通り道)家とインターネットの出入り口。メッセージはここを通過していく
「▶ 再生」で通しで見るか、「次へ」で1手ずつ進めてください。
0 / 12

詳細 — 1段階ずつ追う

① 住所を聞く — 名前解決の実際

中級では「近くの控えから、なければ遠くへ」を見ました。上級では、その問い合わせの型キャッシュ階層を精密にします。

  • 再帰問い合わせと反復問い合わせ — あなた→フルサービスリゾルバへは「答えを持って帰って」という再帰。リゾルバ→ルート/TLD/権威サーバへは「知っている範囲を教えて、次はどこへ聞けばいい?」という反復。役割が違う
  • 多段キャッシュ — 答えはブラウザ内・OS・リゾルバの各層に控えが残る。2回目が速いのはどこかで即答されるから
  • ネガティブキャッシュ — 「存在しない(NXDOMAIN)」という答えも一定時間キャッシュされる。無い名前を何度も引かせないため
  • 暗号化された名前解決(※1) — 通常のDNSは平文でUDPポート53を使い、経路上で覗ける。これを隠すのがDoH/DoT(HTTPS/TLSに載せる方式)
アニメーション『DNSの名前解決(再帰)』を開く
あなた(リゾルバ)ルートサーバTLDサーバ(.com)権威サーバ(example.com)
  • あなた(リゾルバ)名前からIPを調べる係。知らなければ上位へ聞きに行く
  • ルートサーバ住所帳の最上位(世界の目次)。「.com」の担当を教えてくれる
  • TLDサーバ(.com)「.com」を束ねる担当。「example.com」の担当を教えてくれる
  • 権威サーバ(example.com)この名前の最終回答(Aレコード)を持つサーバ
「▶ 再生」で通しで見るか、「次へ」で1手ずつ進めてください。
0 / 7

登場人物メモ

  • ※1 DoH/DoT — DNS over HTTPS/over TLS。名前解決の中身を暗号化して盗み見や改ざんを防ぐ

より詳しい階層と権威の仕組みは DNS を参照。

② 電話をつなぐ — TCPとTLSの中身

接続確立は往復(RTT)※1のコストそのものです。ここを削るのが高速化の主戦場になります。

TCPの3ウェイハンドシェイク — SYN → SYN-ACK → ACK。ここで1RTTを消費し、双方向到達とシーケンス番号の起点合わせを済ませます。

アニメーション『TCPの3ウェイハンドシェイク』を開く
あなた(クライアント)サーバ
  • あなた(クライアント)通信を始めたい側。まず接続を確立しにいく
  • サーバ接続要求を受ける側
「▶ 再生」で通しで見るか、「次へ」で1手ずつ進めてください。
0 / 4

TLSハンドシェイク(HTTPSのみ)— 証明書の提示・検証と、鍵合意(現在は主にECDHE。盗聴前提でも2者だけの鍵を作る)を行います。

  • TLS 1.3 — 手順を刈り込み、1RTTで鍵合意まで完了する
  • 0-RTT再開(※2) — 一度つないだ相手には、次回待ち時間ゼロで最初のデータを乗せられる。ただし再送(リプレイ)耐性の弱さがあり、副作用のない要求に限る
アニメーション『TLSハンドシェイク(鍵の合意)』を開く
ブラウザサーバ
  • ブラウザ相手が本物か確かめ、この通信専用の共通鍵を用意したい側
  • サーバ身分証(証明書)を提示し、鍵合意に応じる側
「▶ 再生」で通しで見るか、「次へ」で1手ずつ進めてください。
0 / 4

つまりHTTPSの初回は、DNS+TCP(1RTT)+TLS(1RTT)という往復の積み重ねの上で、ようやく本題に入れます。この往復を1つでも減らす工夫が、次のHTTP進化の動機です。

登場人物メモ

  • ※1 RTT — Round Trip Time。相手まで往復する時間。距離が遠いほど1往復の重みが増す
  • ※2 0-RTT — 再接続時、鍵合意の完了を待たずに最初のデータを送る高速化。副作用のある要求には使わない

TCP・TLSが通信のどの層に乗るのかは ネットワーク層 を参照。

HTTPの進化 — 多重化とQUIC

同じ「注文と配達」でも、何本の会話を、どうさばくかが世代で変わってきました。

  • HTTP/1.1 — 1接続で1つの往復を順番に処理。keep-aliveで接続は使い回せるが、前の応答が終わるまで次が待つアプリ層のHOLブロッキング(※1)が起きる。ブラウザは接続を複数本張って無理やり並列化していた
  • HTTP/2 — 1本の接続の中をストリームに分けて多重化し、複数の要求/応答を同時に流す。ヘッダもHPACKで圧縮。ただし土台はTCPのままなので、パケット欠落時のTCPレベルのHOLブロッキングは残る
  • HTTP/3 — 転送をTCPではなくQUIC(※2、UDPの上に構築)へ載せ替える。各ストリームを独立に扱うので、1つの欠落が他を止めない。TLSも一体化して接続確立が速く、回線が変わっても接続を保つコネクション移行もできる

登場人物メモ

  • ※1 HOLブロッキング — 先頭のつかえが後続全部を足止めする現象。どの層で起きるかで解決策が変わる
  • ※2 QUIC — UDP上に再送・順序・暗号を自前で載せた新しい転送。HTTP/3の土台

③ 注文とキャッシュ判定

確立した通信路の上で注文します。上級の主役は、そもそも往復を起こさない/軽く済ませるキャッシュ判定です。

  1. ブラウザはHTTPリクエストを送る前に、手元のキャッシュが使えるかを確かめる
  2. Cache-Control: max-age(※1)の期限内なら、通信せずにキャッシュを即使用する(最速)
  3. 期限切れなら再検証(条件付きGET)へ。前回サーバがくれたETag(※2)をIf-None-Matchに、更新日時をIf-Modified-Sinceに載せて問い合わせる
  4. 中身が同じなら 304 Not Modified(本体なし)、変わっていれば 200 +新しい本体が返る

このキャッシュ判定は二段構えです。手元のブラウザキャッシュ(そのユーザー専用=private)と、経路上のCDNなど共有キャッシュ(public、みんなで再利用)。近い共有キャッシュから配れば、大元のサーバまで往復せずに済みます。

登場人物メモ

  • ※1 Cache-Control — 「何秒キャッシュしてよいか」「private/publicか」を指示する応答ヘッダ
  • ※2 ETag — 中身の版を表す短い指紋。一致すれば「変わっていない」と判定できる

共有キャッシュの地理分散と配信の仕組みは CDN を参照。

④ 組み立てる — 描画へ橋渡し

材料が届いたら、ブラウザ内で DOM+CSSOM→レンダーツリー→レイアウト→ペイント→合成 と進みます。ここで効くのが資源の優先度です。

  • レンダーブロッキングCSS — CSSOMが揃うまで最初のペイントが止まる。だからCSSは小さく早く
  • JSの割り込み — 同期<script>はHTMLパースを止める。deferasyncや配置で緩和する
  • 描画とJSは単一メインスレッドを奪い合う——この内部は ブラウザ 上級で深掘りする

⚠️ 上級の落とし穴

  • キャッシュが古すぎる/効かなすぎるmax-ageが長すぎると更新が届かず、無ければ毎回往復。ETagでの再検証と適切な期限で釣り合わせる
  • HTTP/2にすればHOLは消える、という誤解 — 消えるのはアプリ層まで。TCPレベルのHOLはHTTP/3(QUIC)まで残る
  • 証明書チェーンの不備 — 中間証明書の配布漏れで、一部の環境だけTLS検証に失敗する(自分の端末では気づきにくい)
  • 0-RTTの誤用 — 待ち時間ゼロは魅力だが、再送されうるため副作用のある要求(注文確定など)に使うと二重実行の危険
  • 往復の見落とし — 初回はDNS+TCP+TLSと往復が積み上がる。体感速度の主因は距離(RTT)であることが多く、CDNで距離を縮めるのが効く

関連する知識

理解度チェック

そのまま解けます(成績は保存されません)。無料アカウントを作ると、学習の記録と進捗の山登りが始まります。

1. HTTP/2は1本の接続で多重化するのに、なお残ってHTTP/3(QUIC)で解消される「ある層の」ヘッドオブラインブロッキングとは?

2. ブラウザキャッシュの有効期限が切れたあと、ブラウザがETagを付けて再検証したところ、中身は前回から変わっていなかった。サーバは何を返すか?

3. あなた→フルサービスリゾルバへの問い合わせと、リゾルバ→ルート/TLD/権威サーバへの問い合わせの型として正しいのは?

4. DNSで「存在しない(NXDOMAIN)」という答えも一定時間キャッシュされる。この狙いとして正しいのは?

5. TLS 1.3の0-RTT再開について正しいのは?

6. HTTP/3(QUIC)が持ち、回線が変わっても接続を保てる機能はどれ?

7. 現在のTLSで主に使われ、盗聴されている前提でも2者だけの共通鍵を作れる鍵合意方式を英字5文字の略語で答えてください。

8. 「何秒キャッシュしてよいか」「private/publicか」をブラウザやCDNへ指示する応答ヘッダの名前を答えてください。