2009-02-28 5 views
4

Ruby on Railsアプリケーション用のWebフォームを作成しています。フォームには、テキストフィールド、いくつかのチェックボックス、ラジオボタンと2つのテキストボックスがあります。GETまたはPOST?フォームの送信にどの方法を使用しますか?

GET over POSTとその逆の使用のプラスとマイナスは何ですか?私はいつもフォームを取得するのにGETを使うべきだと思っていましたし、投稿するためにPOSTを使うべきだと思っていました。本当に違いはありますか?乾杯。

<% form_tag({ :action => "create" }, :method => "get") do %> 

答えて

17

GETリクエストは常にURLに追加されます。ここでPOSTは要求の本文とともに送信されます。あなたが注意したよう両方が取得したデータを送信するために使用することができますが、いくつかの違いがあります:GETとして

  1. あなたは、クエリ文字列の最大長のサイズに限定されているURLに送信されますが。これはブラウザによって異なりますが、通常は少なくとも2000文字(現代のブラウザでは)です。これは通常、大規模なテキストフィールド(電子メールなど)の送信には不適切です。

  2. GETコマンドは、それが簡単にGETコマンドとしてユーザー

  3. によって変更することができ、クエリ文字列にさらされているASは、クエリ文字列であることは、それが簡単に、ユーザーが特定のページをブックマークできるようにするためでなく、ページにいくつかの状態変数が保存されていると仮定します。

  4. POSTは通常、上記の制限のためにリクエストの性質に適しているため、データを送信する方が適切です。

+0

Chris、 – Niyaz

5

「POST」は、フォームデータ内に表示されることを意味するHTML仕様は、技術的にURLに(ブラウザ)フォームデータが符号化されるべきであることを意味する「GET」として両者の差を定義しますメッセージ本文

ただし、フォーム処理が「冪等」である場合、およびその場合にのみ「GET」メソッドを使用することをお勧めします。単純化すると、「GET」は基本的にはデータを取得(取得)するだけで、「POST」にはデータの格納や更新、製品の注文、電子メールの送信などが含まれます。

1

セマンティックであるかどうかによって異なります。 HTMLベースのAPIを作成している場合は、GETとPOSTの両方が本質的な意味を持ちます。しかし、一般に、GETはデータを取得するために使用され、POSTはデータを送信するために使用されます。

最も大きな違いは、GETはすべてのデータをURLに(サイズが制限される可能性があります)、POSTはHTTPリクエストのデータ部分として送信することです。 GETリクエストでデータ入力を許可すると、CSRFのようにWebエクスプロイトをもっと簡単にすることもできます。誰かが脆弱なフォームのアクション(たとえば、パスワード変更フォーム)にあらかじめ埋め込まれたリンクを作成し、それをクリックして無意識にパスワードを変更する疑いのないユーザーに送信することができます。

さらに、データ入力を行うGETページをリフレッシュすると(注意しないと重複したエントリになる)ブラウザには警告は表示されませんが、POSTではほとんどのブラウザに警告が表示されます。

1

私は他の回答が主なものをカバーしていると思います。また、このビットを追加したいと思います。 GETリクエストでパスワードを送信するなどの重要なデータにGETを使用すると、ブラウザの履歴キャッシュ、プロキシキャッシュ、サーバーログなどに保存されるため、POST以上のパスワードが公開されます。

関連する問題