[414] POST
メソッドは、対象資源に対して引数となるデータを引き渡して、処理を求めるものです。
[415] フォームの提出などによって、 HTTP を通じて鯖側の何らかのデータの追加、編集、削除、その他の操作を求めるために用いられます。
[413] POST
メソッドは、要求に含まれる表現を対象資源がその自身の意味に従って処理することを要求するものです
>>412。
[24] よく、単純な取得操作で副作用を持たない GET
に対し、それ以外の何らかの変更操作一般を POST
で行えると説明されます。
[26] 本来 GET
で十分な時でも、 URL
が非常に長い (可能性がある) 場合に、 POST
が代替として用いられることがあります。 要求URL
の長さに仕様上の上限はありませんが、実装上の制限を設けることは認められていますし、
実用上極めて長い URL は扱いにくいため、かわりに payload body
を使って引数を指定するというものです。
[31]
HTTPメソッド名は原則として大文字・小文字区別されますので、
POST
はすべて大文字で書かなければなりません。
[32]
ただし歴史的理由により、場合によってASCII大文字・小文字不区別になることがあります。
(複雑なので常に大文字を使うのが安全です。)
[8] POST
要求の payload body には、処理の引数のような役割を果たすデータを含めるのが普通です。
[10] HTML のフォームの提出に使う場合は、次の MIME型を payload body に含めます。
[11] Web API ではしばしば application/json
や
XML MIME型が使われます。
[14] HTCPCP の POST
要求では、 payload body
の MIME型は message/coffeepot
でなければなりません >>15。 HTCPCP-TEA では message/teapot
を使います >>16。
[23] それ以外の任意の MIME型を用いることもできますが、 相互運用性は低くなります。
[22] 仕様上必須とはされていませんが、 Content-Length:
ヘッダーがなければ 411
応答を返す実装が存在します。
クライアントは実用上 Content-Length:
ヘッダーを指定する必要があります。
[9] POST
は HTML のフォームの提出に使える要求メソッドの1つです。
HTML では他に GET
も選べますが、
副作用を持つものは POST
、持たないものは GET
と使い分けるのが普通です。
[13] HTCPCP では BREW
と POST
が等価 >>6, >>16 で、珈琲ポットへの制御命令に使われています。ただし
POST
は非推奨とされています >>6, >>16。
[407] POST
は、キャッシュ可能なメソッドです >>406。
ただし、キャッシュ可能なのは、明示的に新鮮度の情報を含む場合のみです >>412。
[416] 起源鯖は、処理の結果によって適切な状態符号を選ぶことにより、 応答の意味を表します >>412。
[417] 起源鯖は、処理に成功して1つ以上の資源が作られた時には、
201
応答を送信するべきです。
Location:
ヘッダーに作成された主たる資源の URL
を含めるべきです。表現は要求の状態と新しい資源への参照を説明したものとするべきです。
>>412
[419] 起源鯖は、 POST
への応答をキャッシュさせて以後の
GET
の処理で再利用できるようにしたい時は、
200
応答を送り、その Content-Location:
ヘッダーに実効要求URLと同じ値を設定することができます >>412。
[420] 起源鯖は、処理の結果が既存の資源の表現と等価である時には、
その URL を Location:
ヘッダーに指定した
303
応答を送信することができます >>412。
[421] 一般的には、 Webブラウザーで直接レンダリングすることを想定して HTML
を返す場合には 302
を返してリダイレクトすることが多く、
JSON などを返す API の場合は 200
を返すことが多いようです。
200
を返すと Webブラウザーではその payload body
がレンダリングされますが、その状態で利用者が再読み込みすると、
(Webブラウザーが確認ダイアログを表示するのが現在では一般的になっていますが)
POST
要求が再送信されてしまいます。これは冪等ではなく、
普通は再投稿等の意図せぬ副作用を持ってしまうので、好ましくなく、
従って 302
でリダイレクトするのが一般的になっています。
(簡単な完了メッセージなどは 302
にせずに
200
でその場で返すこともあります。)[422] 処理中にエラーが発生した場合には、その状況に応じて 400
,
401
, 403
, 404
, 405
, 406
, 500
などが返されることが多いですが、
状態符号を使い分けないアプリケーションでは、 200
でエラーメッセージを含む HTML文書が返されることもよくあります。
[5] クライアントは Prefer: return
によってどのような応答が返されることを望むか記述できます。
(しかし鯖はそれに従う義務はありません。)
[7] HTCPCP 珈琲ポット鯖は、 POST
を
BREW
と等価として扱わなければなりません >>6, >>16。
BREW
を参照。[411] RFC 7252 - The Constrained Application Protocol (CoAP) ( ( 版)) http://tools.ietf.org/html/rfc7252#section-5.8.2
[401] POSTリクエストをリダイレクトするとGETされる?POSTされる? - はこべにっき# ( 版) http://d.hatena.ne.jp/hakobe932/20090707/1246985195
[402] Extra CRLF Character Is Added to a POST Request That Is Sent to an HTTP 1.1 Server ( ( 版)) http://support.microsoft.com/kb/823099/en-us
[403] Apache HTTP Server Project ( ( 版)) http://httpd.apache.org/docs/1.3/misc/known_client_problems.html#trailing-crlf
[404] Apache HTTP Server Project ( ( 版)) http://httpd.apache.org/docs/1.3/misc/known_client_problems.html#no-content-length
[501] tus resumable upload protocol ( ( 版)) http://tus.io/protocols/resumable-upload.html#6-1-3-1
[29] RFC 8144 - Use of the Prefer Header Field in Web Distributed Authoring and Versioning (WebDAV) () https://tools.ietf.org/html/rfc8144#section-3.1
[30] Google ウェブマスター向け公式ブログ: より多くの有益なコンテンツを検索結果に: クローラが POST リクエストにも対応しました () https://webmaster-ja.googleblog.com/2012/01/post.html