HTTP
HTTPはWebでリソースを転送するアプリケーション層プロトコルである。クライアントとサーバがリクエストとレスポンスを交換し、メソッド、ステータスコード、ヘッダ、ボディで意味を表す。設計はステートレスで、各リクエストは独立して完結する。暗号化はTLSを用いたHTTPSで行い、API、ブラウザ、マイクロサービス間通信に広く使われる。
基本概念
リソースはURLで識別され、クライアントはメソッドで操作を指定する。主要なメソッドはGET、POST、PUT、DELETE、PATCH、HEAD、OPTIONSである。安全性(読み取り専用か)と冪等性(同一操作の繰り返しで結果が不変か)は重要な性質である。レスポンスは数値ステータスで結果を示し、ヘッダでメタ情報を、ボディでコンテンツを返す。コンテンツネゴシエーション(Accept系ヘッダ)要点である。
リクエストの構造
- 開始行:メソッド、パス、バージョン(例:HTTP/1.1)。
- ヘッダ:Host、Content-Type、Accept、Authorizationなど。
- ボディ:JSON、フォーム、バイナリの実データ。
冪等性と安全性
GETとHEADは安全である。PUTとDELETEは概ね冪等であるが、POSTは冪等でない。設計時はリトライや障害を考慮し、状態変化を伴う操作に冪等性キーを導入すると堅牢になる。
レスポンスとステータスコード
- 1xx:処理継続。
- 2xx:200、201、204など。
- 3xx:301/308、302/303、304などの転送指示。
- 4xx:400、401、403、404、409、422、429など。
- 5xx:500、502、503、504など。
ヘッダとキャッシュ
キャッシュ制御はCache-Control、ETag、Last-Modified、Expires、Varyで行う。条件付きリクエスト(If-None-Match、If-Modified-Since)により304応答で帯域を節約できる。CDNやブラウザキャッシュを併用すれば待ち時間を削減できる。
圧縮と転送方式
Content-Encodingにgzipやbrを指定して圧縮する。大きな応答はchunked転送で分割し、Rangeリクエストで部分取得も可能である。プロキシやCDN連携ではVary設定に注意する。
接続管理とバージョン
HTTP/1.1は持続的接続を標準化した。HTTP/2は多重化とヘッダ圧縮(HPACK)でHOL待ちを軽減し、HTTP/3はQUIC(UDP)で握手を短縮して損失に強い。ALPNでプロトコル選択を行い、HSTSでHTTPSを強制する。
セキュリティ
HTTPSにより盗聴と改竄を防ぐ。CookieにはSecure、HttpOnly、SameSiteを付与する。CORSはオリジン間共有の制御であり、許可ヘッダ(Access-Control-*)を適切に設定する。認証はBearerトークン、Basic、OAuth 2.0、OpenID Connectが用いられる。入力検証、最小特権、レート制限、監査ログを組み合わせる。
API設計の実務
リソース指向のURI、整合したエラーフォーマット、ページネーション、ソート、フィルタ、楽観的同時実行制御(ETag/If-Match)を整える。冪等性キーと指数バックオフでリトライに備える。RateLimitヘッダ群で制限を可視化し、相関IDで追跡性を高める。
パフォーマンス最適化
接続再利用、圧縮、適切なキャッシュ、画像最適化、CDNのエッジ配置を組み合わせる。プリロードやプレコネクトで初回遅延を削減し、304の活用で帯域を節約する。HTTP/3はモバイル回線で効果が高い。測定にはDevToolsやA/Bテストを用い、ボトルネックに集中する。
代表的なツール
- curlやHTTPieでリクエストを再現する。
- ブラウザDevToolsのNetworkパネルでヘッダとタイムラインを確認する。
- 負荷試験(k6、JMeter)でスループットとレイテンシを評価する。
コメント(β版)