web-dev-qa-db-ja.com

違いは何ですか POST そしてGET?

私は最近PHP/AJAX/jQueryに関わってきたばかりで、これらの技術の重要な部分はPOSTGETのそれであるように思われます。

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

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

しかしPOSTは違います。

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

第二に、私はPHPの外でもPOSTGETを見ました。これはAJAXとjQueryでも同様です。 POSTGETは、これら3つの間でどう違うのでしょうか。それらは同じアイディア、同じ機能、違う使い方をしていますか?

355
Hristo

POSTは、GETとは異なり、通常、要求の本文に関連情報を持っています。 (GETには本文を含めないでください。クッキー以外に、情報を渡す唯一の場所はURLにあります。)URLを比較的きれいに保つことに加えて、POSTを使用すると、さらに多くの情報を送信できます。あらゆる種類のデータを送信することができます(たとえば、ファイルアップロードフォームではGETを使用できません。POSTと特別なコンテンツタイプ/エンコーディングを使用する必要があります)。

それ以外の点では、POSTはリクエストが何かを変えることを暗示しており、やり直すべきではありません。そのため、「戻る」ボタンを押したときにフォームデータを再送信するかどうかを尋ねるブラウザが表示されることがあります。

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

85
cHao

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

  • GETリクエストはブラウザによってキャッシュされる可能性がありますが、これはajaxを使用するときに問題となる可能性があります。
  • GETリクエストはパラメータをユーザーに公開します(POSTも同様ですが、見やすくはありません)。
  • POSTはより多くの情報をサーバーに渡すことができ、長さはほぼ任意です。
27
Alex

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

POSTはサーバーの状態を変更するためのものです。それはより多くのデータを運び、クエリを繰り返すことは1つではなく2つのメッセージを作成するような副作用を持つことが許されます(そしてしばしば期待されます)。

17
Victor Nicollet

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

いくつかの例:

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

  • コメントを投稿

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

11
Skilldrick

POSTを使用すると、マルチパートMIMEエンコードも実行できます。つまり、ファイルを添付することもできます。また、ページ間を移動して投稿変数を使用している場合は、投稿パラメータを再送信するかどうかを尋ねる警告が表示されます。通常、HTTPリクエストでは同じように見えますが、何かをサーバーに "POST"する必要がある場合はPOSTに、サーバーから何かをGETする必要がある場合は "GET"を使用する必要があります。彼らが意図していた方法。

6
Matt Williamson

(AJAXで使用する場合)POST&とGETの間の唯一の「大きな」違いは、GETがURLによって提供されるためです。

1
Activist