HTTP 仕様の要点
🐱 この章の目次
HTTP のバージョン
HTTP/1.1 はテキストベースのプロトコルで、Keep-Alive によるコネクション再利用が標準化されたバージョンです。 HTTP/2 はバイナリフレーミングと多重化を導入し、1 本の TCP コネクション上で複数のリクエストを並行処理します。 HTTP/3 は TCP の代わりに QUIC(UDP ベース)を使い、ヘッドオブラインブロッキングを解消しました。
| バージョン | トランスポート | 多重化 | ヘッダー圧縮 |
|---|---|---|---|
| HTTP/1.1 | TCP | なし(パイプラインは非実用的) | なし |
| HTTP/2 | TCP | ストリーム多重化 | HPACK |
| HTTP/3 | QUIC (UDP) | ストリーム多重化 | QPACK |
リクエスト/レスポンス構造
HTTP リクエストはメソッド、パス、ヘッダー、ボディで構成されます。 レスポンスはステータスコード、ヘッダー、ボディで構成されます。 ステートレスなプロトコルであるため、各リクエストは独立して処理されます。
# curl でリクエストの構造を確認
curl -v https://example.com/api/users
重要なヘッダー
| ヘッダー | 役割 |
|---|---|
Content-Type | ボディのメディアタイプ(application/json など) |
Accept | クライアントが受け入れ可能なメディアタイプ |
Authorization | 認証情報(Bearer <token> など) |
Cache-Control | キャッシュ動作の指示(max-age, no-store など) |
ETag / If-None-Match | 条件付きリクエストによるキャッシュ検証 |
X-Request-Id | 分散トレーシング用のリクエスト識別子 |
ステータスコードのカテゴリ
| 範囲 | 意味 | 代表例 |
|---|---|---|
| 1xx | 情報 | 100 Continue |
| 2xx | 成功 | 200 OK, 201 Created, 204 No Content |
| 3xx | リダイレクト | 301 Moved Permanently, 304 Not Modified |
| 4xx | クライアントエラー | 400 Bad Request, 401 Unauthorized, 404 Not Found |
| 5xx | サーバーエラー | 500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable |
API 設計では適切なステータスコードを返すことで、クライアントがエラーハンドリングを自動化しやすくなります。
Keep-Alive とコネクション管理
HTTP/1.1 では Connection: keep-alive がデフォルトで有効であり、TCP ハンドシェイクのオーバーヘッドを削減します。
コネクションプーリングを使うことで、アプリケーション側でもコネクションの生成・破棄コストを最小化できます。
ただし、アイドルコネクションを長時間保持するとサーバーリソースを消費するため、タイムアウト設定が必要です。