web-dev-qa-db-ja.com

GET vs POST

[〜#〜] get [〜#〜][〜#〜] post [〜#〜]の違いは何ですかAjax =リクエスト?

[〜#〜] get [〜#〜]を使用する場合、パラメーターはURLで送信されることを除いて、これら2つの間に違いはありません。すべてのリクエストはバックグラウンドで行われ、ユーザーは違いを見つけられないため、違いはありません。

編集:[〜#〜] put [〜#〜]および[〜#〜] delete [〜#〜]メソッドは何のために使用されますか?

72
Jakub Arnold

GETは、サーバーからデータを取得するために設計されています。 POST(およびあまり知られていない友人のPUTおよびDELETE)は、サーバー上のデータを変更するために設計されています。

GETリクエストにより、アプリケーションからデータが削除されることはありません。 GETでクリックしてデータを削除できるリンクがある場合、サイトをスパイダーしているGoogleはすべての「削除」リンクをクリックできます。

正規の答えは here にあり、HTML 2.0仕様を引用しています:

フォームの処理がi等である場合(つまり、世界の状態に永続的な観測可能な影響がない場合)、フォームメソッドはGETである必要があります。多くのデータベース検索には目に見える副作用はなく、クエリフォームの理想的なアプリケーションを作成します。

フォームの処理に関連付けられたサービスに副作用がある場合(たとえば、データベースの変更またはサービスのサブスクリプション)、メソッドはPOSTである必要があります。

AJAX呼び出しでは、サーバーがサポートするメソッドを使用する必要があります。データを変更する操作がPOST/PUT/DELETEによって呼び出されるようにサーバーを常に設計する必要があります。通常、C/R/U/Dを「POSTまたはPUT」(作成)/ GET(読み取り)/ PUT(更新)/ DELETE(削除)にマップするREST。

131
crb

大量のデータや機密データをHTTPS経由で送信する場合は、POSTを使用することをお勧めします。単純なパラメーターの場合は、GETを使用します。

GETリクエストには、送信できるデータの量に制限があります。正確な数は忘れてしまいますが、大量のものを送信している場合は問題が発生する可能性があります。

基本的に、GETとPOSTの違いは、GET要求ではパラメーターがURLで渡されることです。POSTの場合と同様に、パラメーターはメッセージ本文に含まれます。

24
Ryan Smith

AJAXかどうかは関係ありません。あなたが取っているアクションについてです。 [〜#〜] rest [〜#〜]の原則に従うことをお勧めします。 。更新、削除などの追加規定があります...

19
Brian

GET要求は、CSRF(クロスサイトリクエストフォージェリ)攻撃で悪用しやすいです。つまり、偽のPOSTリクエストにはユーザー側でJavascriptを有効にする必要がありますが、偽のGETリクエストはimg、scriptタグだけで可能です。

4
Sergey

多くのWebサーバーは、URLの一部として渡すことができるデータの長さを制限しているため、GET要求はデバッグが困難な奇妙な方法で中断する場合があります。

また、ほとんどのサーバーソフトウェアはアクセスログにURLを記録するため、GET要求で機密情報(パスワードなど)を渡すと、おそらくこれはプレーンテキストでディスクに書き込まれます。

RESTの観点から、GETリクエストには副作用はないはずです-データを変更するべきではありません。リソースへの変更をコミットする場合は、http動詞にPUT、POST、またはUPDATEを使用する必要があります。

3
Don Werve

両方は、データを送信し、そのデータを使用して応答を受信するために使用されます。

GET:サーバーのインフォメーションストアを取得します。すなわち。検索、ツイート、個人情報。情報を送信する場合は、process.php?name = subrotoを使用してリクエスト送信リクエストを取得します。したがって、基本的にはURLを介して情報を送信します。 URLは2083文字を超えて処理できません。それで、ブログ投稿のために、それが不可能であることを覚えていますか?

POST:投稿はgetと同じことを行います。ユーザー登録、ユーザーログイン、ビッグデータ送信、ブログ投稿。セキュリティで保護された情報を送信する必要がある場合は、ポストを使用するか、URLを通過しないビッグデータに使用します。

AJAX:$ .get()および$ .post()には、$。ajax()のサブセットである機能が含まれています。多くの設定があります。

$ .get()メソッド。これは、$。Ajax()の一種の略記です。 $ .get()を使用する場合、オブジェクトを渡す代わりに、引数を渡します。少なくとも、最初の2つの引数が必要です。これらの引数は、取得するファイルのURL(「test.txt」)と成功コールバックです。

概要:

$.get( url [, data ] [, success ] [, dataType ] )
$.post( url [, data ] [, success ] [, dataType ] ) // for sending secure or Large information
$.ajax( url [, settings ] )  // More Configaration
2
Subroto Biswas

まず、一般的な情報。データの読み取りのみを行う場合はGETを使用し、データベース、txtファイルなどで何かを変更する場合はPOSTを使用します。

しかし問題は、一部のブラウザーがGETの結果をキャッシュすることです。 IE7でAJAXリクエストに問題がありましたが、ついにブラウザーがGETの結果をキャッシュすることがわかりました。フローを再考し、リクエストをPOSTに変更します。

したがって、キャッシングが必要ない場合は、GETを使用しないでください。

(もちろん、GET操作でキャッシュを無効にできます。しかし、私はそれを好まなかった)

1
trante

私については、POSTが好きです。送信された値が「コントロール」を持っているデータに制限されていることがわかっているイベントへのアクセスを予約します。たとえば、IDを持つアイテムを取得します。例、「getitem?id = 123」、「deleteImtem?id = 123」、...他のケースでは、ユーザーが入力可能なフォームがある場合、POSTを好みます。

ライアン・スミスが言ったように、POSTを使用して大量のデータを送信し、他の言語/特殊文字で使用する場合の負担を減らすことをお勧めします(通常、すべてのメジャーJavaScriptフレームワークは ' ntはそれに対処するための問題を抱えていますが、POSTを使用する方が少ないと思います)。

RESTパースペクティブについては、私の意見では、これを新しいプロジェクトで使用できます(プロジェクト全体との一貫性を保つため))。

最後に、ネットワークで使用されるいくつかのプログラム(URLロガー(つまり、従業員が自動更新されていないサイトで時間を失ったかどうかを確認するために...)プロキシなど)または他の種類のツールがクエリをインターセプトできます。別のWebページのように、GETで送信したパラメーターがレポートに表示されます。しかし、この状況では、プロジェクトから他への変更が問題になることはありません! ;)

1
user86830

Ajax、HTML GETs、またはPOSTのどれを使用していても、formcurlの違いは同じです。関連する定義は次のとおりです。

0
Hank Gay