どちらも本体内のサーバーにデータを送信しているようですが、どう違うのですか。
HTTP PUT:
PUTはファイルまたはリソースを特定のURIに、そして正確にそのURIに置きます。そのURIにファイルまたはリソースがすでにある場合、PUTはそのファイルまたはリソースを置き換えます。そこにファイルやリソースがない場合、PUTはそれらを作成します。 PUTは べき乗 ですが、逆説的にPUT応答はキャッシュできません)。
HTTP POST:
POSTはデータを特定のURIに送信し、そのURIのリソースが要求を処理することを期待します。この時点でWebサーバーは、指定されたリソースのコンテキストでデータをどう処理するかを決定できます。 POSTメソッドは idempotent )ではありませんが、サーバーが適切なCache-ControlヘッダーとExpiresヘッダーを設定している限り、POST response areはキャッシュ可能です。
公式のHTTP RFCでは、POSTを次のように指定しています。
HTTP 1.1のRFC [POST のRFCロケーション
POSTとPUTの違い:
RFC自体がコアの違いを説明しています。
POSTとPUTリクエストの基本的な違いは、Request-URIの意味の違いに反映されています。 POST要求内のURIは、囲まれたエンティティを処理するリソースを識別します。そのリソースは、データ受け入れプロセス、他のプロトコルへのゲートウェイ、または注釈を受け入れる別のエンティティなどです。対照的に、PUTリクエストのURIはリクエストに同封されたエンティティを識別します - ユーザエージェントはどんなURIが意図されているか知っていて、サーバはリクエストを他のリソースに適用しようと試みてはいけません。サーバが要求が異なるURIに適用されることを望むなら、それは301(永久に移動された)応答を送らなければなりません。ユーザエージェントはそれからリクエストをリダイレクトするかどうかに関してそれ自身の決定をするかもしれません。
正しい方法を使用しますが、関係ありません:
REST ROA vs SOAPの利点の1つは、HTTP REST ROAを使用するときに、HTTP動詞/メソッドを適切に使用できるようになることです。たとえば、その場所にリソースを作成する場合にのみPUTを使用し、リソースの作成または変更にGETを使用することは決してありません。
意味だけ。
HTTPのPUT
はリクエストの本体を受け入れ、それをURIで識別されるリソースに格納することになっています。
HTTPのPOST
はより一般的です。サーバー上でアクションを開始するはずです。そのアクションは、URIで識別されたリソースに要求本体を格納すること、または異なるURIであること、または異なるアクションであることがあります。
PUTは like ファイルアップロードです。 URIへの書き込みはそのURIに正確に影響します。 URIへのPOSTは、まったく影響を及ぼしません。
RESTスタイルのリソースの例を挙げます。
たくさんの本の情報を含む "POST/books"は新しい本を作成し、その本を識別する新しいURL "/ books/5"で応答するかもしれません。
"PUT/books/5"は、IDが5の新しい本を作成するか、既存の本をID 5に置き換える必要があります。
リソース以外のスタイルでは、POSTを副作用のあるものなら何にでも使用できます。もう1つの違いは、PUTは冪等であるべきであるということです - 複数のPOSTが複数のオブジェクトを作成するかもしれない、あるいはあなたのPOSTアクションが何であれ、同じデータに対する同じデータの複数PUTは問題ないはずです。
PUTは、特定のURIにものを「アップロード」したり、そのURIにすでに含まれているものを上書きしたりするための方法を意味します。
一方POSTは、特定のURIに関連したデータを送信する方法です。
私の知る限りでは、PUTは主にレコードの更新に使用されます。
POST - 文書やその他のリソースを作成する
PUT - 作成した文書またはその他のリソースを更新します。
しかし、そのPUTを明確にするために、既存のレコードがあればそれを「置き換え」、存在しなければ作成します。
他の人たちはすでに素晴らしい答えを投稿しています。私はちょうどほとんどの言語、フレームワーク、そしてユースケースでPOSTを扱うことになるでしょう。 PUT、DELETEなどは基本的には簡単な質問です。
POSTはファクトリタイプのメソッドのようなものと見なされます。あなたはあなたが欲しいものを作り出すためにそれと共にデータを含み、そして反対側にあるものは何でもそれをどうするべきか知っている。 PUTは与えられたURLで既存のデータを更新するため、あるいはURIが何であるかがわかっていてそれがまだ存在していないときに新しいものを作成するために使われます(作成するPOSTとは対照的)何かをして、必要ならURLを返してください。
ご覧ください: http://zacharyvoase.com/2009/07/03/http-post-put-diff/
私は最近、Web開発者が、POSTがリソースの作成に使用され、PUTがリソースの更新/変更に使用されていると誤解していることにかなり悩まされています。
RFC 2616の55ページ(「ハイパーテキスト転送プロトコル - HTTP/1.1」)、 9.6 (「PUT」)を見れば、PUTが実際に何のためにあるのかわかるでしょう。
PUTメソッドは、囲まれたエンティティが提供されたRequest-URIの下に格納されることを要求します。
POSTとPUTの違いを説明するのに便利な段落もあります。
POSTとPUTリクエストの基本的な違いは、Request-URIの意味の違いに反映されています。 POST要求内のURIは、囲まれたエンティティを処理するリソースを識別します。そのリソースは、データ受け入れプロセス、他のプロトコルへのゲートウェイ、または注釈を受け入れる別のエンティティなどです。対照的に、PUTリクエストのURIはリクエストに同封されたエンティティを識別します - ユーザエージェントはどんなURIが意図されているか知っていて、サーバはリクエストを他のリソースに適用しようと試みてはいけません。
更新と作成の違いについては何も言及されていません。それが目的ではないからです。それはこれの違いについてです:
obj.set_attribute(value) # A POST request.
この:
obj.attribute = value # A PUT request.
ですから、この一般的な誤解の広がりを止めてください。あなたのRFCを読んでください。
RESTは開発者にHTTPメソッドを明示的に使用し、プロトコル定義と一致する方法で使用するように依頼します。この基本的なREST設計原則は、作成、読み取り、更新、削除(CRUD)操作とHTTPメソッド間の1対1のマッピングを確立します。このマッピングに従って:
•サーバー上にリソースを作成するには、POSTを使用します。
•リソースを取得するには、GETを使用してください。
•リソースの状態を変更または更新するには、PUTを使用します。
•リソースを削除または削除するには、DELETEを使用します。
さらに詳しい情報: RESTful Webサービス:IBMの基本 /
POSTとPUTの違いは、PUTは冪等であるということです。つまり、同じPUTリクエストを複数回呼び出すと、常に同じ結果が得られます(副作用はありません)。 POST requestは、同じリソースを複数回作成することによる(追加の)副作用が繰り返し発生する可能性があります。
GET
:GETを使用したリクエストはデータのみを取得します。つまり、指定されたリソースの表現をリクエストします。
POST
:リソースを作成するためにデータをサーバーに送信します。要求の本文の種類は、Content-Typeヘッダーによって示されます。それはしばしば状態の変化やサーバーへの副作用を引き起こします
PUT
:新しいリソースを作成するか、ターゲットリソースの表現をリクエストペイロードに置き換えます。
PATCH
:リソースに部分的な変更を加えるために使用されます
DELETE
:指定されたリソースを削除します
TRACE
:ターゲットリソースへのパスに沿ってメッセージループバックテストを実行し、便利なデバッグメカニズムを提供します。
OPTIONS
:ターゲットリソースの通信オプションを記述するために使用されます。クライアントはOPTIONSメソッドのURL、またはサーバー全体を指すアスタリスク(*)を指定できます。
HEAD
:GETリクエストと同じレスポンスを要求しますが、レスポンスボディはありません。
CONNECT
:ターゲットリソースによって識別されたサーバーへのトンネルを確立し、SSL(HTTPS)を使用するWebサイトにアクセスするために使用できます。
POST
は一般的な CSRF攻撃 の影響を受けるが、PUT
はそうではないことを言及する価値があります。
以下のCSRFは 被害者がattackersite.comを訪問したときにPUT
では不可能です:
通常のリクエスト(cookieが送信されます):( PUT
はサポートされている属性値ではありません)
<form id="myform" method="post" action="http://target.site.com/deleteUser" >
<input type="hidden" name="userId" value="5">
</form>
<script>document.createElement('form').submit.call(document.getElementById('myform'));</script>
XHRリクエスト(クッキーが送信されます):(PUT
はプリフライトリクエストをトリガーします)
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://target.site.com/deleteUser");
xhr.withCredentials=true;
xhr.send(["userId=5"]);
単に
POST
はリソースを作成するために使用され、リソースを返しますURI
EX
REQUEST : POST ..../books
{
"book":"booName",
"author":"authorName"
}
この呼び出しは新しい本を作成し、その本を返しますURI
Response ..../books/5
PUT
はリソースを置き換えるために使用され、そのリソースが存在する場合は単純に更新しますが、そのリソースが存在しない場合は作成します
REQUEST : PUT ..../books/5
{
"book":"booName",
"author":"authorName"
}
PUT
を使用してリソース識別子を提供しますが、POST
は新しいリソース識別子を返します。