SDN
← 概念一覧へ
通信プロトコル

HTTP

HTTP

クライアントとサーバーがデータをやり取りするための、リクエスト/レスポンス型のプロトコル。『動詞(GET等)+ リソース(URL)』で操作を表す。Web通信の土台。

キーポイント
  • クライアント/サーバー間のデータの符号化・転送の方法を定める。リクエストに対してレスポンスを返す自己完結型。
  • 操作は『verb(メソッド)+ resource(エンドポイント)』で表す。
  • 主なverbと性質(冪等/安全/キャッシュ可): GET(読取: Yes/Yes/Yes)、POST(作成/処理: No/No/条件付き)、PUT(作成/置換: Yes/No/No)、PATCH(部分更新: No/No/条件付き)、DELETE(削除: Yes/No/No)。
  • HTTPは下位のTCP/UDPの上で動く(通常はTCP)。
トレードオフ

HTTPはシンプルで普遍的、あらゆるWebの土台。リクエスト/レスポンスの単純なモデルゆえに分かりやすくキャッシュもしやすいが、その単純さゆえにリアルタイム双方向通信(サーバーからの能動的プッシュ)などには工夫(WebSocket等)が必要になる。下位のTCP/UDPの特性を引き継ぐ。

基本構造: 動詞 + リソース

HTTPの操作は『何を(リソース=URL)どうする(動詞=メソッド)』という形で表現します。

  • GET /users/123 = ユーザー123を取得する
  • DELETE /users/123 = ユーザー123を削除する
  • POST /users = ユーザーを新規作成する
図を描画中...

HTTPメソッドの性質(重要な3軸)

メソッド用途冪等?安全?キャッシュ可?
GET読み取りYesYesYes
POST作成/処理NoNo条件付き
PUT作成/置換YesNoNo
PATCH部分更新NoNo条件付き
DELETE削除YesNoNo

用語をかみ砕く

  • 冪等(idempotent): 同じリクエストを何回送っても結果が同じ。DELETE /users/123 は1回でも10回でもユーザー123は消えた状態で変わらない。一方 POST(新規作成)は送るたびに新しいデータが増えるので冪等でない。
  • 安全(safe): サーバーの状態を変えない。GETは読むだけなので安全。
  • キャッシュ可: 結果を使い回せる。GETは安全なのでキャッシュしやすい。
図を描画中...

なぜ冪等性が大事か

ネットワークは不安定で、リクエストが届いたか分からないことがあります。冪等なメソッドなら、不安なら安全に再送できます(2回届いても害がない)。POSTを安易に再送すると二重注文などの事故になるので、再送設計で冪等性は超重要です。

つまずきポイント

  • POSTが冪等でないのは『送るたびに新しいリソースができる』から。決済や注文でPOSTを再送する際は、二重実行防止(冪等キー)が必要。
  • HTTPは下位のTCP(通常)の上に乗る。だからTCPの『順序保証・再送』といった特性をそのまま受け継ぐ。

関連する概念

この概念で腕試し

関連する 4 問のクイズに挑戦できます。

クイズを解く