🐱 うさねこ教室 Python と可観測性の教室

HTTP 仕様の要点

🐱 この章の目次

HTTP のバージョン

HTTP/1.1 はテキストベースのプロトコルで、Keep-Alive によるコネクション再利用が標準化されたバージョンです。 HTTP/2 はバイナリフレーミングと多重化を導入し、1 本の TCP コネクション上で複数のリクエストを並行処理します。 HTTP/3 は TCP の代わりに QUIC(UDP ベース)を使い、ヘッドオブラインブロッキングを解消しました。

バージョントランスポート多重化ヘッダー圧縮
HTTP/1.1TCPなし(パイプラインは非実用的)なし
HTTP/2TCPストリーム多重化HPACK
HTTP/3QUIC (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 ハンドシェイクのオーバーヘッドを削減します。 コネクションプーリングを使うことで、アプリケーション側でもコネクションの生成・破棄コストを最小化できます。 ただし、アイドルコネクションを長時間保持するとサーバーリソースを消費するため、タイムアウト設定が必要です。