POST リクエストメソッド
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
POST は HTTP のメソッドで、サーバーにデータを送信します。リクエストの本体の型は Content-Type ヘッダーで示されます。
PUT と POST との違いは、 PUT がべき等であることです。一度呼び出しても複数回呼び出しても成功すれば同じ効果になります(副作用がありません)。
同一の POST リクエストを連続して送信すると、同じ注文を複数回作成するなど、追加の効果を持つことがあります。
HTML フォームは、ふつうデータを POST を用いて送信し、これがふつうサーバーに変化をもたらします。
HTML フォームにおいて、本体コンテンツの形式/エンコード方式は、<form> 要素の enctype属性または <input> または <button> 要素のformenctype属性によって決定されます。
エンコードは次のいずれかになることがあります。
application/x-www-form-urlencoded: キーと値は、アンパサンド(&)で別個のキーと値のペア(キー-値タプル)としてエンコードされ、キーと値の間には等号(=)がつけられます(例:first-name=Frida&last-name=Kahlo)。 キーと値の両方にある英数字以外の文字はパーセントエンコードされます。このため、この型はバイナリーデータには適しておらず、そのような用途にmultipart/form-dataを使用しましょう。multipart/form-data: それぞれの値はデータのブロック ("body part") として送信され、ユーザーエージェントが定義するデリミター(boundary="delimiter12345"など)がそれぞれの部分を区切ります。 キーはそれぞれの部分のContent-Dispositionヘッダーの中で与えられます。text/plain
POST リクエストが fetch() など、HTML フォーム以外の方法で送信された場合は、本体はあらゆる型を使うことができます。HTTP 1.1 仕様書で記述されている通り、 POST は以下のような機能をカバーする統一的なメソッドになるよう設計されています。
- 既存のリソースの注釈
- 掲示板、ニュースグループ、メーリングリスト、又は同様の記事グループへの投稿
- サインアップモーダルからの新規ユーザーの追加
- フォームの送信結果などにおける、データを扱うプロセスへのデータブロックの受け渡し
- 追加操作によるデータベースの拡張
構文
POST <request-target>["?"<query>] HTTP/1.1
<request-target>-
Hostヘッダーで指定された情報と組み合わせて、リクエストの対象リソースを特定します。 これはオリジンサーバーへのリクエストでは絶対パス(例:/path/to/file.html)であり、プロキシーへのリクエストでは絶対 URL(例:http://www.example.com/path/to/file.html)です。 <query>省略可-
疑問符
?で始まるオプションのクエリ成分。 多くの場合、key=valueという形で識別情報を伝達するために使用されます。
例
>URL エンコードされたフォーム送信
application/x-www-form-urlencoded コンテンツエンコーディング(デフォルト)を使用するフォームは、下記のように、key=value ペアで構成されるフォームデータを & 記号で区切って本体に含めたリクエストを送信します。
POST /test HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 27
field1=value1&field2=value2
マルチパートのフォーム送信
multipart/form-data エンコーディングは、フォームにファイルや大量のデータが含まれる場合に使用されます。
このリクエスト本体は、境界文字列を使用してフォームのそれぞれの部分を区切ります。
この形式のリクエストの例を示します。
POST /test HTTP/1.1
Host: example.com
Content-Type: multipart/form-data;boundary="delimiter12345"
--delimiter12345
Content-Disposition: form-data; name="field1"
value1
--delimiter12345
Content-Disposition: form-data; name="field2"; filename="example.txt"
value2
--delimiter12345--
Content-Disposition ヘッダーは、フォームデータをどのように処理すべきかを示し、必要に応じて name や filename のフィールドを指定します。
仕様書
| Specification |
|---|
| HTTP Semantics> # POST> |
ブラウザーの互換性
関連情報
- HTTP リクエストメソッド
- HTTP レスポンスステータスコード
- HTTP ヘッダー
Content-TypeヘッダーContent-DispositionヘッダーGETメソッド