Mímisbrunnr知恵の泉

← コンピュータネットワーク 一覧

🎓 レベル:基礎 | 重要度:A(必須) 📎 前提:TCP(3ウェイ・再送・フロー制御)

要点(BLUF)

リクエストとレスポンスの構造

HTTPはテキストベースで、人が読める形です。

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: curl/8.0
Accept: text/html

(リクエストここまで・本文なし)

サーバの応答:

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 1256

<!DOCTYPE html> ...本文...

メソッドとステータスコード

メソッド役割
GET取得(副作用なし)
POST送信・作成
PUT置換・更新
DELETE削除
コード帯意味
2xx成功200 OK
3xxリダイレクト301 恒久移動・304 未変更
4xxクライアント側エラー404 未検出・403 禁止
5xxサーバ側エラー500 内部エラー・503 利用不可

HTTPSとTLS:安全に運ぶ

HTTPは平文なので、途中の機器に丸見えです。HTTPSはTLSでコネクションを暗号化します。

graph LR
  C["クライアント"]
  T["TLSハンドシェイク(鍵交換・サーバ証明書検証)"]
  S["サーバ"]
  C --> T --> S
  T -->|"以後は暗号化されたHTTP"| S

TLSは(1) サーバ証明書で相手が本物か検証し、(2) 鍵を交換して以後の通信を暗号化します。これにより盗聴・改ざん・なりすましを防ぎます。TLSや証明書の詳細はサイバーセキュリティ分野へ繋ぎ、ここでは「HTTPS=HTTP+TLS、443番」と押さえます。

HTTPの進化

下位層がTCP(1.1/2)からUDP(3)へ変わったのは、第4章で触れた「信頼性をアプリ側で作る」流れの実例です。

なぜステートレスなのか(設計の直観)

HTTPは基本ステートレス(各リクエストが独立で、前の状態を覚えない)です。これによりサーバは膨大なリクエストを軽くさばけ、負荷分散もしやすい。「ログイン状態」のような状態は、Cookieやトークンを各リクエストに添えることでアプリ側が補います。状態を持たない単純さでスケールを稼ぎ、必要な状態だけ明示的に運ぶ——Webが巨大化できた設計判断です。

⚠️ よくある誤解

対応 lab

関連