中級では、初級の4段階を実際のプロトコル名で追い直しました。上級では、その各段を「何往復かかり、どう減らせるか」という性能とキャッシュの視点で端から端まで掘り下げ、さらにHTTPそのものの進化(1.1→2→3)まで踏み込みます。ここは通信経路(ネットワーク)の深掘りを担当します。
同じ1リクエストを、サービス全体のシステム構成(フロント・バック・DB・インフラの層や、規模に耐える工夫)の側から掘るのは 1リクエストの流れ 上級です。
上級の解説は準備中のため、上級の内容を表示しています。
中級では、初級の4段階を実際のプロトコル名で追い直しました。上級では、その各段を「何往復かかり、どう減らせるか」という性能とキャッシュの視点で端から端まで掘り下げ、さらにHTTPそのものの進化(1.1→2→3)まで踏み込みます。ここは通信経路(ネットワーク)の深掘りを担当します。
同じ1リクエストを、サービス全体のシステム構成(フロント・バック・DB・インフラの層や、規模に耐える工夫)の側から掘るのは 1リクエストの流れ 上級です。
中級では「近くの控えから、なければ遠くへ」を見ました。上級では、その問い合わせの型とキャッシュ階層を精密にします。
登場人物メモ:
より詳しい階層と権威の仕組みは DNS を参照。
接続確立は往復(RTT)※1のコストそのものです。ここを削るのが高速化の主戦場になります。
TCPの3ウェイハンドシェイク — SYN → SYN-ACK → ACK。ここで1RTTを消費し、双方向到達とシーケンス番号の起点合わせを済ませます。
TLSハンドシェイク(HTTPSのみ)— 証明書の提示・検証と、鍵合意(現在は主にECDHE。盗聴前提でも2者だけの鍵を作る)を行います。
つまりHTTPSの初回は、DNS+TCP(1RTT)+TLS(1RTT)という往復の積み重ねの上で、ようやく本題に入れます。この往復を1つでも減らす工夫が、次のHTTP進化の動機です。
登場人物メモ:
TCP・TLSが通信のどの層に乗るのかは ネットワーク層 を参照。
同じ「注文と配達」でも、何本の会話を、どうさばくかが世代で変わってきました。
keep-aliveで接続は使い回せるが、前の応答が終わるまで次が待つアプリ層のHOLブロッキング(※1)が起きる。ブラウザは接続を複数本張って無理やり並列化していた登場人物メモ:
確立した通信路の上で注文します。上級の主役は、そもそも往復を起こさない/軽く済ませるキャッシュ判定です。
Cache-Control: max-age(※1)の期限内なら、通信せずにキャッシュを即使用する(最速)If-None-Matchに、更新日時をIf-Modified-Sinceに載せて問い合わせるこのキャッシュ判定は二段構えです。手元のブラウザキャッシュ(そのユーザー専用=private)と、経路上のCDNなど共有キャッシュ(public、みんなで再利用)。近い共有キャッシュから配れば、大元のサーバまで往復せずに済みます。
登場人物メモ:
共有キャッシュの地理分散と配信の仕組みは CDN を参照。
材料が届いたら、ブラウザ内で DOM+CSSOM→レンダーツリー→レイアウト→ペイント→合成 と進みます。ここで効くのが資源の優先度です。
<script>はHTMLパースを止める。defer/asyncや配置で緩和するmax-ageが長すぎると更新が届かず、無ければ毎回往復。ETagでの再検証と適切な期限で釣り合わせるそのまま解けます(成績は保存されません)。無料アカウントを作ると、学習の記録と進捗の山登りが始まります。
問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へ指示する応答ヘッダの名前を答えてください。