POST

HTTP の POST メソッドは、サーバーにデータを送信します。リクエストの本文のタイプは Content-Type ヘッダーで示されます。

PUTPOST との違いは、 PUT がべき等であることです。一度呼び出しても複数回呼び出しても成功すれば同じ効果になる (作用がない) のに対して、同じ POST に成功すると、複数回の注文を行うような、追加の効果が出ます。

POST リクエストは、ふつう HTML フォームを介して送信され、サーバーに変化をもたらします。この場合、 <form> 要素の enctype 属性もしくは、 <input> 又は <button> 要素の formenctype 属性に適切な文字列を設定することでコンテンツタイプを選択します。

  • application/x-www-form-urlencoded: キーと値は、その間に '=' がある形でキーと値の組になり、 '&' で区切られてエンコードされます。キーや値の英数字以外の文字は、パーセントエンコーディングされます。このため、このタイプはバイナリデータを扱うのには向きません (代わりに multipart/form-data を使用してください)
  • multipart/form-data: それぞれの値はデータのブロック ("body part") として送信され、ユーザーエージェントが定義するデリミター ("boundary") がそれぞれの部分を区切ります。キーはそれぞれの部分の Content-Disposition ヘッダーの中で与えられます。
  • text/plain

POST リクエストが HTML フォーム以外の方法 — XMLHttpRequest など — で送信された場合は、本文はあらゆるタイプを取ることができます。 HTTP 1.1 仕様書で記述されている通り、 POST は以下のような機能をカバーする統一的なメソッドになるよう設計されています。

  • 既存のリソースの注釈
  • 掲示板、ニュースグループ、メーリングリスト、又は同様の記事グループへの投稿
  • サインアップモーダルからの新規ユーザーの追加
  • フォームの送信結果などの結果などにおける、データを扱うプロセスへのデータブロックの受け渡し
  • 追加操作によるデータベースの拡張
リクエストの本文 あり
成功時のレスポンスの本文 あり
安全性 なし
べき等性 なし
キャッシュ 新鮮な情報が含まれている場合のみ
HTML フォームでの使用

構文

POST /test

既定の application/x-www-form-urlencoded コンテンツタイプを使用した単純なフォームです。

POST /test HTTP/1.1
Host: foo.example
Content-Type: application/x-www-form-urlencoded
Content-Length: 27

field1=value1&field2=value2

multipart/form-data コンテンツタイプを使用したフォームです。

POST /test HTTP/1.1
Host: foo.example
Content-Type: multipart/form-data;boundary="boundary"

--boundary
Content-Disposition: form-data; name="field1"

value1
--boundary
Content-Disposition: form-data; name="field2"; filename="example.txt"

value2
--boundary--

仕様書

仕様書 題名
RFC 7231, セクション 4.3.3: POST Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content
RFC 2046, セクション 5.1.1: Common Syntax Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types

ブラウザーの互換性

BCD tables only load in the browser

関連情報