HTTP|Web通信の標準プロトコル規格

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は冪等でない。設計時はリトライや障害を考慮し、状態変化を伴う操作に冪等性キーを導入すると堅牢になる。

レスポンスとステータスコード

  1. 1xx:処理継続。
  2. 2xx:200、201、204など。
  3. 3xx:301/308、302/303、304などの転送指示。
  4. 4xx:400、401、403、404、409、422、429など。
  5. 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)でスループットとレイテンシを評価する。

コメント(β版)