ポスト(HTTP)

コンピューティングにおいて、POSTはワールドワイドウェブで使用されるHTTPでサポートされているリクエストメソッドです。POSTリクエストメソッドは、設計上、ウェブサーバーがリクエストメッセージの本文に含まれるデータを受け入れるように要求します。多くの場合、データは保存されます。[ 1 ]ファイルのアップロードや入力済みのウェブフォームの送信時によく使用されます。

一方、HTTP GETリクエストメソッドはサーバーから情報を取得します。GETリクエストの一部として、URLのクエリ文字列にデータを渡すことができます。例えば、検索語、日付範囲、またはクエリを定義するその他の情報を指定します。

POSTリクエストの一部として、任意の種類の任意の量のデータをリクエストメッセージの本文に入れてサーバーに送信できます。POSTリクエストのfieldsヘッダーフィールドは通常、メッセージ本文のインターネットメディアタイプを示します。

データの投稿

ワールド ワイド ウェブと HTTP は、POST と GET のほか、PUT と DELETE など、多数のリクエスト メソッドまたは「動詞」に基づいています。ウェブ ブラウザは通常 GET と POST のみを使用しますが、RESTfulオンラインアプリは他の多くのメソッドも使用します。HTTP メソッドの範囲内での POST の位置付けは、新しいデータ エンティティの表現をサーバーに送信し、 URIで識別されるリソースの新しい従属要素として保存することです。[ 1 ]たとえば、URI の場合http://example.com/customers、POST リクエストは新しい顧客を表すことが期待され、それぞれに顧客の名前、住所、連絡先の詳細などが含まれます。初期のウェブサイト設計者は、2 つの重要な点でこの当初の概念から逸脱しました。第 1 に、POST データが格納される従属Web リソースを URI がテキストで記述する技術的な理由はありません。実際、何らかの努力をしない限り、URI の最後の部分は、 など、ウェブ アプリケーションの処理ページとそのテクノロジを記述する可能性が高くなります。第二に、ほとんどの Web ブラウザでは GET または POST のみを使用するという本来の制限があるため、設計者は、既存のレコードの変更や削除など、他の多くのデータ送信およびデータ管理タスクを実行するために POST を再利用する必要性を感じました。 http://example.com/applicationform.php

最初の点を改善するための、影響力のある著述家たちによる取り組みは、早くも1998年に始まりました。[ 2 ] Ruby on RailsなどのWebアプリケーションフレームワークは、デザイナーがユーザーにセマンティックURLを提供することを容易にします。2番目の点に関しては、クライアントサイドスクリプトを使用したり、スタンドアロンアプリケーションを作成したりすることで、必要に応じて他のHTTPメソッドを利用することが可能です。 [ 3 ]しかし、それ以外の場合、サーバーのデータを送信または変更するほとんどのWebフォームは、その目的でPOSTを使用し続けています。

すべてのウェブフォームが開始タグmethod="post"で指定する必要があるというわけではありません。多くのフォームは、メインデータベースを変更することなく、サーバーから情報を取得する際に、より正確な指定を行うために使用されます。例えば、検索フォームは、開始タグで指定するのに最適です。[ 4 ]method="get"

HTTP GETがデータ取得に適さない場合もあります。例えば、URLに大量のデータを指定する必要がある場合などです。ブラウザやウェブサーバーには、切り捨てやエラーなしで処理できるURLの長さに制限がある場合があります。URLやクエリ文字列内の予約文字をパーセントエンコードすると、 URLの長さが大幅に増加する可能性があります。Apache HTTP ServerはURLで最大4,000文字まで処理できますが、[ 5 ] Microsoft Internet ExplorerではURLの長さが2,048文字に制限されています。[ 6 ]同様に、リクエストを完了するためにユーザー名やパスワードなどの機密情報を他のデータと共に送信する必要がある場合、HTTP GETは使用すべきではありません。HTTPSを使用してデータの転送中の傍受を防いだとしてもブラウザの履歴やウェブサーバーのログにはURL全体が平文で保存される可能性があり、どちらかのシステムがハッキングされた場合に漏洩する可能性があります。このような場合は、HTTP POSTを使用する必要があります。[ 7 ]

ウェブフォームの送信に使用

ウェブブラウザがウェブフォーム要素からPOSTリクエストを送信する際、デフォルトのインターネットメディアタイプは「application/x-www-form-urlencoded」です。[ 8 ]これは、重複する可能性のあるキーと値のペアをエンコードするための形式です。各キーと値のペアは「&」文字で区切られ、各キーと値は「=」文字で区切られます。キーと値はどちらも、スペースを「+」文字に置き換え、その他の英数字以外の文字にはパーセントエンコードを適用することでエスケープされます。[ 9 ]

例えば、キーと値のペア

名前: ガレス・ワイリー 年齢: 24 式: a+b == 21 

エンコードされている

名前=ガレス+ワイリー&年齢=24&式=a%2Bb+%3D%3D+21 

HTML 4.0 以降、フォームはRFC 2388 で定義されているmultipart/form-dataでデータを送信することもできます(HTML 2.0 の拡張として定義され、HTML 3.2 で言及されている以前の実験バージョンについては、RFC 1867 も参照してください)。

フォームが属する同じページへの POST の特殊なケースは、ポストバックと呼ばれます。

サーバーの状態に影響を与える

RFC 7231によれば、POSTメソッドはべき等性がない。つまり、同一のリクエストを複数回送信しても、リクエストを一度だけ送信した場合と同じ効果が得られない可能性がある。そのため、POSTは、ブログ投稿にコメントを送信したり、オンラインアンケートに投票したりするなど、実行されるたびに状態が変化するリクエストに適している。GETは副作用がなく、べき等性があると定義されており、べき等性操作は「2回目以降のリクエストに副作用を及ぼさない」。[ 10 ] [ 11 ]このため、検索エンジンのインデクサーなどのウェブクローラーは通常、GETメソッドとHEADメソッドのみを使用し、自動リクエストがそのようなアクションを実行しないようにしている。

しかし、冪等リクエストであってもPOSTが使用される理由があり、特にリクエストが非常に長い場合はその傾向が顕著です。URLの制約により、 GETメソッドが生成するクエリ文字列は、特にパーセントエンコーディングによって非常に長くなる可能性があります。[ 10 ]

参考文献

  1. ^ a b Fielding, R.; Reschke, J. (2014). Fielding, R.; Reschke, J. (eds.). "Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content - 4.3.3 POST" . tools.ietf.org . doi : 10.17487/RFC7231 . S2CID  14399078 . 2014年7月24日閲覧. POSTメソッドは、対象リソースに対し、リクエストに含まれる表現を、そのリソース固有のセマンティクスに従って処理するよう要求します。
  2. ^バーナーズ=リー、ティム (1998). 「クールなURIは変わらない」 . W3C . 2012年10月17日閲覧
  3. ^ Friedman, Mike (2009). 「WebアプリケーションにおけるHTTP PUTおよびDELETEメソッドの使用」 . 2012年10月17日閲覧
  4. ^ 「フォーム送信」 . HTML 4.01仕様. W3C. 1999. 2012年10月17日閲覧
  5. ^ Rigsby, Dan (2008). 「RESTと最大URLサイズ」 . 2012年11月4日時点のオリジナルよりアーカイブ2012年10月17日閲覧。
  6. ^ 「Internet Explorer では URL の最大長は 2,048 文字です」。Microsoft。
  7. ^ Fielding, R.; Reschke, J. (2014). Fielding, R.; Reschke, J. (編). 「ハイパーテキスト転送プロトコル (HTTP/1.1): セマンティクスとコンテンツ - 9.4 URI における機密情報の開示」 . RFC 7231. doi : 10.17487/RFC7231 . S2CID 14399078. 2014年7月25閲覧. 
  8. ^バーナーズ=リー、ティムコノリー、ダン(1995年9月22日). 「ハイパーテキスト・マークアップ言語 - 2.0 - フォーム」 . ワールド・ワイド・ウェブ・コンソーシアム. 2011年1月15日閲覧
  9. ^ 「HTML ドキュメント内のフォーム」
  10. ^ a b Korpela, Jukka (2003年9月28日). 「HTMLフォームにおけるGETメソッドとPOSTメソッドの違いは何か?」タンペレ工科大学. 2011年1月15日閲覧
  11. ^ RFC 7231、4.2.1安全なメソッド