質問

どちらも本体内のサーバーにデータを送信しているようですが、何が違うのでしょうか?

役に立ちましたか?

解決

HTTP PUT:

PUT は、ファイルまたはリソースを特定の URI に、正確にその URI に配置します。その URI にファイルまたはリソースがすでに存在する場合、PUT はそのファイルまたはリソースを置き換えます。ファイルまたはリソースが存在しない場合は、PUT によってファイルまたはリソースが作成されます。PUTは 冪等, ただし、逆説的に、PUT 応答はキャッシュ可能ではありません。

PUT の HTTP 1.1 RFC の場所

HTTPポスト:

POST は特定の URI にデータを送信し、その URI のリソースがリクエストを処理することを期待します。この時点で、Web サーバーは、指定されたリソースのコンテキストでデータをどう扱うかを決定できます。POSTメソッドはそうではありません 冪等, ただし、POST 応答 サーバーが適切な Cache-Control ヘッダーと Expires ヘッダーを設定している限り、キャッシュ可能です。

公式の HTTP RFC では、POST を次のように指定しています。

  • 既存のリソースの注釈。
  • 掲示板、ニュースグループ、メーリングリスト、または同様の記事グループにメッセージを投稿します。
  • フォームを送信した結果など、データ処理プロセスにデータブロックを提供します。
  • 追加操作によるデータベースの拡張。

POST の HTTP 1.1 RFC の場所

POST と PUT の違い:

RFC 自体は、核となる違いを次のように説明しています。

投稿とPUTリクエストの根本的な違いは、リクエスト-URIの異なる意味に反映されています。POSTリクエストのURIは、囲まれたエンティティを処理するリソースを識別します。そのリソースは、データ受容プロセス、他のプロトコルへのゲートウェイ、または注釈を受け入れる別のエンティティである可能性があります。対照的に、PUTリクエストのURIは、リクエストに囲まれたエンティティを識別します - ユーザーエージェントはURIが意図しているものを知っており、サーバーはリクエストを他のリソースに適用しようとしてはなりません。サーバーがリクエストを別のURIに適用することを望む場合、301(永久に移動)応答を送信する必要があります。その後、ユーザーエージェントは、リクエストをリダイレクトするかどうかについて独自の決定を下す場合があります。

関係のないことはさておき、適切な方法を使用します。

利点の 1 つは、 レスト・ロア SOAP との違いは、HTTP REST ROA を使用する場合、HTTP 動詞/メソッドの適切な使用が推奨されることです。したがって、たとえば、その正確な場所にリソースを作成したい場合にのみ PUT を使用します。また、リソースの作成や変更に GET を使用することはありません。

他のヒント

セマンティクスのみ。

HTTP PUT はリクエストの本文を受け入れ、それを URI で識別されるリソースに保存することになっています。

HTTP POST の方が一般的です。サーバー上でアクションを開始することになっています。そのアクションは、URI によって識別されるリソースにリクエスト本文を保存することである場合もあれば、別の URI である場合もあれば、別のアクションである場合もあります。

PUTは のように ファイルのアップロード。URI への put は、まさにその URI に影響します。URI への POST は何らかの影響を与える可能性があります。

REST スタイルのリソースの例を挙げると、次のようになります。

一連の書籍情報を含む「POST /books」は、新しい書籍を作成し、その書籍を識別する新しい URL で応答する可能性があります。"/本/5"。

「PUT /books/5」では、ID 5 で新しいブックを作成するか、既存のブックを ID 5 で置き換える必要があります。

非リソース スタイルでは、POST は副作用のあるほぼすべての用途に使用できます。もう 1 つの違いは、PUT は冪等である必要があることです。同じ URL に対する同じデータの複数の PUT は問題ありませんが、複数の POST では複数のオブジェクトや、POST アクションの内容が作成される可能性があります。

PUT は、特定の URI に内容を「アップロード」するか、その URI に既に存在するものを上書きするためのメソッドとして意図されています。

一方、POST は、特定の URI に関連するデータを送信する方法です。

参照する HTTP RFC

私の知る限り、PUT は主にレコードの更新に使用されます。

  1. POST - ドキュメントまたはその他のリソースを作成します。

  2. PUT - 作成されたドキュメントまたはその他のリソースを更新します。

ただし、PUT は通常、既存のレコードが存在する場合はそれを「置き換え」、存在しない場合は作成することを明確にしておきます。

他の人がすでに素晴らしい回答を投稿していますが、ほとんどの言語、フレームワーク、およびユースケースでは、PUT よりもはるかに頻繁に POST を扱うことになることを付け加えておきたいと思います。PUT、DELETEなどを行うところまで。基本的に雑学的な質問です。

  1. 得る:サーバーからデータを取得します。他に影響はないはずです。
  2. 役職:新しいエンティティを作成するためにデータをサーバーに送信します。ファイルをアップロードしたり、Web フォームを送信したりするときによく使用されます。
  3. 置く:POST に似ていますが、既存のエンティティを置き換えるために使用されます。
  4. パッチ:PUT に似ていますが、既存のエンティティ内の特定のフィールドのみを更新するために使用されます。
  5. 消去:サーバーからデータを削除します。
  6. 痕跡:サーバーが何を受信するかをテストする方法を提供します。送信されたものを返すだけです。
  7. オプション:クライアントは、サービスでサポートされているリクエスト メソッドに関する情報を取得できます。関連する応答ヘッダーは、サポートされているメソッドでは許可されます。CORS では、実際のリクエスト メソッドについてサーバーに通知し、カスタム ヘッダーについて問い合わせるためのプリフライト リクエストとしても使用されます。
  8. :応答ヘッダーのみを返します。
  9. 接続する:ブラウザがプロキシと通信し、最終的な URI が https:// で始まることがわかっている場合にブラウザによって使用されます。CONNECT の目的は、エンドツーエンドの暗号化された TLS セッションを許可することであるため、プロキシはデータを読み取ることができません。

POST は、ファクトリ タイプのメソッドの一種とみなされます。必要なものを作成するためにデータを含めると、相手側はそれをどう扱うかを知っています。PUT は、指定された URL にある既存のデータを更新するため、または URI が何になるか分かっていてそれがまだ存在しない場合に新しいものを作成するために使用されます (何かを作成して URL を返す POST とは対照的)必要に応じて)。

参照してください: http://zacharyvoase.com/2009/07/03/http-post-put-diff/

私は最近、POST はリソースの作成に使用され、PUT はリソースの更新/変更に使用されるという Web 開発者の間でよくある誤解にかなりイライラしています。

RFC 2616 (「ハイパーテキスト転送プロトコル – HTTP/1.1」) の 55 ページを見ると、 セクション9.6 (「PUT」) を見ると、PUT が実際に何のためにあるのかがわかります。

PUT メソッドは、囲まれたエンティティが指定された Request-URI に保存されることを要求します。

POST と PUT の違いを説明する便利な段落もあります。

POST リクエストと PUT リクエストの基本的な違いは、Request-URI の意味の違いに反映されています。POST リクエスト内の URI は、囲まれたエンティティを処理するリソースを識別します。そのリソースは、データを受け取るプロセス、他のプロトコルへのゲートウェイ、または注釈を受け入れる別個のエンティティである可能性があります。対照的に、PUT リクエスト内の URI は、リクエストに含まれるエンティティを識別します。ユーザー エージェントは、どの URI が意図されているかを知っており、サーバーはリクエストを他のリソースに適用しようとしてはなりません (MUST NOT)。

更新と作成の違いについては何も言及されていません。それが目的ではないからです。これの違いについてです。

obj.set_attribute(value) # A POST request.

この:

obj.attribute = value # A PUT request.

したがって、この一般的な誤解の蔓延を止めてください。RFC を読んでください。

RESTは、開発者に、プロトコル定義と一致する方法でHTTPメソッドを明示的に使用するように求めます。この基本的な休憩設計の原則は、作成、読み取り、更新、削除(CRUD)操作とHTTPメソッドの間に1対1のマッピングを確立します。このマッピングによると:

• サーバー上にリソースを作成するには、POST を使用します。

• リソースを取得するには、GET を使用します。

• リソースの状態を変更または更新するには、PUT を使用します。

• リソースを削除するには、DELETE を使用します。

より詳しい情報:RESTful Web サービス:IBMの基本

POST と PUT の違いは、PUT が冪等であることです。つまり、同じ PUT リクエストを複数回呼び出すと常に同じ結果が生成されます (副作用はありません)。一方、POST リクエストを繰り返し呼び出すと、(追加) 同じリソースを複数回作成することによる副作用。

GET :GET を使用したリクエストはデータのみを取得します。つまり、指定されたリソースの表現をリクエストします。

POST :データをサーバーに送信してリソースを作成します。リクエストの本文のタイプは、Content-Type ヘッダーによって示されます。多くの場合、サーバー上の状態の変化や副作用が発生します。

PUT :新しいリソースを作成するか、ターゲット リソースの表現をリクエスト ペイロードで置き換えます

PATCH :リソースに部分的な変更を適用するために使用されます

DELETE :指定されたリソースを削除します

TRACE :ターゲット リソースへのパスに沿ってメッセージ ループバック テストを実行し、便利なデバッグ メカニズムを提供します。

OPTIONS :これはターゲット リソースの通信オプションを記述するために使用され、クライアントは OPTIONS メソッドの URL を指定するか、サーバー全体を参照するアスタリスク (*) を指定できます。

HEAD :GET リクエストと同じレスポンスを要求しますが、レスポンスボディはありません。

CONNECT :ターゲット リソースで識別されるサーバーへのトンネルを確立し、SSL (HTTPS) を使用する Web サイトにアクセスするために使用できます。

言及する価値があるでしょう POST いくつかの共通の条件が適用されます CSRF攻撃 その間 PUT そうではありません。

以下のCSRFは、 では不可能 PUT 被害者が Attackersite.com にアクセスすると、次のようになります。

通常のリクエスト (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 リクエスト (Cookie が送信されます):(PUT プリフライトリクエストをトリガーします)

var xhr = new XMLHttpRequest();
xhr.open("POST", "http://target.site.com/deleteUser");
xhr.withCredentials=true;
xhr.send(["userId=5"]);

単に

POST はリソースの作成に使用され、 はリソースを返します URI

REQUEST : POST ..../books
{
"book":"booName",
"author":"authorName"
}

この呼び出しにより、新しいブックが作成され、そのブックが返されます。 URI

Response ..../books/5

PUT リソースを置き換えるために使用されます。そのリソースが存在する場合は単純に更新しますが、そのリソースが存在しない場合は作成します。

REQUEST : PUT ..../books/5
{
"book":"booName",
"author":"authorName"
}

を使用して PUT リソース識別子を提供しますが、 POST 新しいリソース識別子を返します

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top