HTTP — メソッド・ステータスコード・ヘッダー・HTTPS・TLS・HTTP/2・3
HTTP — メソッド・ステータスコード・ヘッダー・HTTPS・TLS・HTTP/2・3
🎯 このlessonを読み終えたら
このlessonを最後まで読み終えたら、以下の3つを自信を持って説明できるようになります。
- ▸✅ HTTP 1.0 → 1.1 → 2 → 3 の変遷のポイント
- ▸✅ GET・POST・PUT・DELETE・PATCHの冪等性
- ▸✅ Cache-Control・ETag・304のキャッシュ動作
学習目標をチェックリストとして手元に置き、すべて答えられるようになったらlessonを閉じてください。
HTTPメソッド・ステータスコード・ヘッダー
HTTPメソッド(8種類):
冪等性 = 同じリクエストをN回送っても1回と同じ結果になること。決済・POST以外はすべて冪等であることが推奨。
HTTPステータスコード(5グループ):
よく混同されるケース:
- ▸401 = 未認証(ログインが必要)
- ▸403 = 認証済みだが権限なし
- ▸404 = リソースが存在しない(または権限なしを隠すための使用)
主要なHTTPヘッダー:
HTTPS + TLS 1.3 ハンドシェイク
HTTPS = HTTP + TLS。平文のHTTPはパケットを傍受されるとすべての内容が漏洩します。
TLS 1.3 ハンドシェイク(1-RTT、2018年標準化):
証明書の3段階検証:
1. 信頼性: 発行者は信頼されたCAか?(ブラウザ内蔵のCAリスト)
2. 有効性: 期限切れでない?失効していない(CRL・OCSP)?
3. 一致性: ドメインが一致しているか?(*.example.com ↔ api.example.com)
Forward Secrecy(TLS 1.3では必須):
- ▸セッションごとに新しい鍵を生成
- ▸サーバー鍵が漏洩しても過去のトラフィックは復号できない
HTTP/1.1 vs 2 vs 3:
HTTP/2の多重化 — 1つのTCP接続で複数のストリーム:
- ▸HTTP/1.1: 同時接続は6本まで(ブラウザ制限)
- ▸HTTP/2: 1接続で無制限のストリーム。Head-of-Lineブロッキングを解消
HTTP/3(QUIC) — TCPの限界を克服:
- ▸TCPのHoLブロッキングを解消(1パケット損失で全体が待機)
- ▸0-RTT再接続(PSK)
- ▸モバイルでIPが変わっても接続を維持
HTTPキャッシュ — Cache-Control・ETag・304
キャッシュが必要な理由
同じリソースを毎回再取得しない — 帯域幅・サーバー負荷・体感速度のすべてが改善されます。
Cache-Control — 現代の標準
よく使う6つのディレクティブ
実務パターン
ETag — 変更確認のための指紋
ETagが一致すれば本文は送信されない — 帯域幅の節約。本文1MB → レスポンス0KB。
Last-Modified — 旧来の方式
ETagより精度が低い(秒単位)。現代のサーバーはETagを優先。
ブラウザキャッシュ vs CDNキャッシュ
- ▸ブラウザキャッシュ:
privateまたはpublicの両方を保存。自分のPCのみ。 - ▸CDNキャッシュ:
publicのみ保存。世界中のエッジサーバーで共有。
Vary ヘッダーでどのリクエストの違いに応じて別キャッシュを作るかを指定:
stale-while-revalidate — ゼロ遅延 + 最新性
60秒まではfresh。60〜360秒は古いレスポンスを即座に返しつつ、バックグラウンドで新しいデータを取得して更新。ユーザーは即座にレスポンスを受け取り、次のリクエストでは新しいデータが返る。
Next.jsとTanStack Queryは内部的にこの戦略を使用しています。
🤖 AIへの質問例
- ▸「Next.jsのnext.config.jsで静的ファイルに1年キャッシュ + HTMLにno-cacheを設定して」
- ▸「このAPIレスポンスに60秒キャッシュ + stale-while-revalidate 300秒のヘッダーを追加して」