RFC 9110: HTTPセマンティクス
HTTP/1.1・2・3で共通する意味論を1本に集約したRFC 9110を読み解き、メソッドの安全性・冪等性、ステータスコード、条件付きリクエストや認証の枠組みまで、バージョンに依存しない知識として整理できる。
- RFC 9110(2022年、STD 97)はHTTPの意味論を版非依存で定義する。HTTP/1.1構文は9112、キャッシュは9111へ分離し、RFC 2616と7230〜7235系列を整理した。
- GET/HEAD/OPTIONS/TRACEは安全かつ冪等、PUT/DELETEは冪等だが安全でなく、POSTはどちらでもない。安全なら必ず冪等だが、その逆は成り立たない。
- ステータスは1xx〜5xxの5クラスに分類され、条件付きリクエストのETag/Last-Modified、レンジ取得の206、認証枠組みのWWW-Authenticate/401など、実装で日常的に触れる要素の意味がここで規定される。
このRFCが決めたこと
横にスクロール
RFC 9110(2022年6月、STD 97)は、HTTPというプロトコルの「意味」だけを取り出して定義した文書だ。リクエストやレスポンスがネットワーク上でどう表現されるか(メッセージ構文)はHTTP/1.1・2・3で異なる(HTTPのバージョンを参照)が、GETが何を意味するか、404が何を表すかといった意味論は、すべてのバージョンで共通する。9110はこの共通部分を一手に担う。
かつてHTTP/1.1はRFC 2616、のちにRFC 7230〜7235へと分割されていた。9110はそのうち意味論(旧7231・7232・7233・7235と、7230の意味論部分)を統合し、バージョン固有のメッセージ構文はRFC 9112(HTTP/1.1)・9113(HTTP/2)・9114(HTTP/3)へ、キャッシュはRFC 9111へと切り分けた。
「GET /index.html を取得する」という意味は、HTTP/1.1のテキスト行でも、HTTP/2のバイナリフレームでも変わらない。9110を一度読めば、どのバージョンでも通じる知識が身につく。
要点の精読
メソッドと安全性・冪等性
メソッドには安全(safe)と冪等(idempotent)という2つの性質がある。安全とは、そのリクエストがサーバー状態の変更を意図しない読み取り専用の操作であること。冪等とは、同じリクエストを複数回送っても、1回だけ送ったのと同じ効果になることだ。定義上、安全なメソッドは必ず冪等でもある。
| メソッド | 安全 | 冪等 |
|---|---|---|
| GET / HEAD | はい | はい |
| PUT / DELETE | いいえ | はい |
| POST | いいえ | いいえ |
PUTは「この内容で置き換える」ので何度実行しても最終状態は同じ(冪等)だが、状態を変えるため安全ではない。POSTはどちらでもないため、送信の再試行が二重登録を生む恐れがあり、実装で最も注意を要する。
ステータスコードの5クラス
ステータスコードは先頭の数字で5つのクラスに分かれる。1xx情報、2xx成功、3xxリダイレクト、4xxクライアントエラー、5xxサーバーエラー。クラスの意味自体が規定されているので、未知のコード(例えば299)を受け取っても、クライアントはクラス単位で扱いを判断できる。
条件付きリクエストとレンジ
条件付きリクエストは、ETagやLast-Modifiedという「バリデータ」を使い、リソースが変わっていなければ本体の転送を省く仕組みだ。If-None-Matchがサーバー側のETagと一致すれば、304 Not Modifiedが本体なしで返る。
GET /style.css HTTP/1.1
If-None-Match: "abc123"
HTTP/1.1 304 Not Modified
ETag: "abc123"
レンジ取得はRangeヘッダで一部だけを要求し、206 Partial Contentで返す。これらはHTTPキャッシュや再開可能ダウンロードの基盤になっている。
認証の枠組み
9110は特定の認証方式ではなく、チャレンジ/レスポンス型の枠組みを定める。サーバーは401 UnauthorizedとWWW-Authenticateヘッダで認証スキームを提示し、クライアントはAuthorizationヘッダで応答する。方式の詳細はセキュリティ側の話題だが、その土台となる約束事はここにある。
つまずきやすい点
まず、安全と冪等の混同に注意したい。安全は冪等の一部(安全⊂冪等)であり、PUT/DELETEは冪等だが安全ではない。次に、401と403は別物だ。401は「認証されていない(やり直せる)」、403は「認証済みでも許可されない」を意味する。もう一つ、9110はリソースと、その表現(representation)を区別する。Content-Typeなどが記述するのは、あくまで表現のメタデータであって、リソースそのものではない。
まとめ
RFC 9110は、HTTPの意味論をバージョンから独立させた土台だ。メソッドの性質、ステータスのクラス、条件付きリクエスト、認証枠組みを一度理解すれば、HTTP/1.1でも2でも3でも同じ知識が通用する。HTTPの他のRFC解説はRFC精読から辿れる。
RFC精読の記事ガイド
RFC 9110: HTTPセマンティクスを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
RFC
比較で見る軸
難易度: advanced / カテゴリ: RFC精読 / タグ数: 5
導入後に効く点
GET/HEAD/OPTIONS/TRACEは安全かつ冪等、PUT/DELETEは冪等だが安全でなく、POSTはどちらでもない。安全なら必ず冪等だが、その逆は成り立たない。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- RFC精読
- タグ数
- 5
判断チェックリスト
- 自社の用途が「RFC / HTTP」に近いか確認する。
- 強みである「RFC 9110(2022年、STD 97)はHTTPの意味論を版非依存で定義する。HTTP/1.1構文は9112、キャッシュは9111へ分離し、RFC 2616と7230〜7235系列を整理した。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。