421

私は最近PHP/AJAX / jQueryに携わったばかりですが、これらのテクノロジーの重要な部分はとのテクノロジーのようPOSTですGET

POSTまず、との違いは何GETですか?GET実験を通して、戻り変数とその値をURL文字列に追加することがわかりました

website.com/directory/index.php?name=YourName&bday=YourBday

しかし、POSTそうではありません。

それで、これが唯一の違いですか、それともどちらか一方を使用するための特定の規則や規則がありますか?

第二に、私はPHPの外でも見ましたPOSTGETAJAXとjQueryでも。POSTこれら3つのGET違いは何ですか?それらは同じアイデア、同じ機能、異なる方法で使用されていますか?

4

7 に答える 7

480

GETPOSTは2つの異なるタイプのHTTPリクエストです。

ウィキペディアによると:

GETは、指定されたリソースの表現を要求します。GETは、Webアプリケーションでアクションを実行するために使用するなど、副作用を引き起こす操作には使用しないでください。この理由の1つは、GETがロボットまたはクローラーによって任意に使用される可能性があるためです。これにより、要求によって発生する可能性のある副作用を考慮する必要がなくなります。

POSTは、処理されるデータ(たとえば、HTMLフォームから)を識別されたリソースに送信します。データはリクエストの本文に含まれています。これにより、新しいリソースが作成されるか、既存のリソースが更新されるか、またはその両方が発生する可能性があります。

したがって、基本的GETにリモートデータの取得に使用され、リモートデータのPOST挿入/更新に使用されます。


HTTP / 1.1仕様(RFC 2616)セクション9メソッド定義には、他のHTTPメソッドに関する詳細情報GETと、POST興味がある場合は他のHTTPメソッドが含まれています。

GET各メソッドの使用目的を説明することに加えて、仕様には、データの取得にのみ使用する必要がある理由の少なくとも1つの実用的な理由も記載されています。

HTTPプロトコルを使用するサービスの作成者は、機密データの送信にGETベースのフォームを使用しないでください。これにより、このデータがRequest-URIにエンコードされるためです。多くの既存のサーバー、プロキシ、およびユーザーエージェントは、サードパーティに表示される可能性のある場所にリクエストURIを記録します。サーバーは、代わりにPOSTベースのフォーム送信を使用できます


GET最後に、 AJAXリクエスト に使用する際の重要な考慮事項は、一部のブラウザ(特にIE)がGETリクエストの結果をキャッシュすることです。したがって、たとえば、同じGETリクエストを使用してポーリングすると、クエリしているデータがサーバー側で更新されている場合でも、常に同じ結果が返されます。この問題を軽減する1つの方法は、タイムスタンプを追加して、リクエストごとにURLを一意にすることです。

于 2010-08-13T13:42:16.510 に答える
112

POST、とは異なりGET、通常、リクエストの本文に関連情報が含まれています。(AGETには本文を含めるべきではないため、Cookieを除いて、情報を渡す場所はURL内のみです。)URLを比較的クリーンに保つだけでPOSTなく、より多くの情報を送信することもできます(URLの長さは限られているため、すべての実用的な方法で目的)、ほぼすべてのタイプのデータを送信できます(たとえば、ファイルアップロードフォームは使用できません。使用する必要があり、さらに特別なコンテンツタイプ/エンコーディングGETを使用する必要があります)。POST

それとは別にPOST、リクエストは何かを変更することを意味し、意地悪にやり直すべきではありません。そのため、「戻る」ボタンを押したときにフォームデータを再送信するかどうかをブラウザから尋ねられることがあります。

GET一方、べきである必要があります。つまり、100万回実行でき、サーバーは毎回同じことを実行します(基本的に同じ結果を表示します)。

于 2010-08-13T13:50:14.940 に答える
38

違いの説明ではありませんが、正しい方法を選択する際に考慮すべきことがいくつかあります。

  • GETリクエストはブラウザーによってキャッシュされる可能性があり、これはajaxを使用するときに問題(または利点)になる可能性があります。
  • GETリクエストは、パラメーターをユーザーに公開します(POSTも同様に公開しますが、表示されにくくなります)。
  • POSTは、はるかに多くの情報をサーバーに渡すことができ、ほぼすべての長さにすることができます。
于 2010-08-13T13:58:24.770 に答える
24

POSTとGETは2つのHTTPリクエストメソッドです。GETは通常、一部のデータを取得することを目的としており、べき等であることが期待され(クエリを繰り返しても副作用はありません)、限られた量のパラメーターデータのみをサーバーに送信できます。注意しないと、一部のブラウザではGETリクエストがデフォルトでキャッシュされることがよくあります。

POSTは、サーバーの状態を変更することを目的としています。それはより多くのデータを運び、クエリを繰り返すことは、1つではなく2つのメッセージを作成するなどの副作用をもたらす可能性があります(そしてしばしば予想されます)。

于 2010-08-13T13:44:33.147 に答える
23

RESTfullyで作業している場合は、データのみを取得しているリクエストにはGETを使用し、何かを発生させているリクエストにはPOSTを使用する必要があります。

いくつかの例:

  • 特定のSOの質問を示すページを取得する

  • コメントを投稿

  • [カートに追加]ボタンをクリックしてPOSTリクエストを送信します。

于 2010-08-13T13:42:57.143 に答える
9

POSTを使用すると、マルチパートMIMEエンコーディングも実行できます。つまり、ファイルを添付することもできます。また、ページのナビゲーション全体でpost変数を使用している場合、ユーザーはpostパラメーターを再送信するかどうかを尋ねる警告を受け取ります。通常、HTTPリクエストでは同じように見えますが、サーバーに何かを「POST」する必要がある場合はPOSTに固執し、サーバーから何かをGETする必要がある場合は「GET」に固執する必要があります。

于 2010-08-13T13:45:40.827 に答える
1

POSTとGETの唯一の「大きな」違いは(AJAXで使用する場合)、GETはURLで提供されるため、長さが制限されていることです(URLの長さは無限であるため)。

于 2010-08-13T13:46:21.573 に答える