• ベストアンサー

GETとPOSTの違い

<form>でCGIへのデータの転送ですが、 (1)「GET」と 「POST」がありますが、どんな違い、メリット/デメリットがあるのか教えてください (2)また、送信情報のセキュリティーと関係はありますか? (3)検索エンジンなどはGETが多いようですが、なぜですか? いろいろ質問が多くて申し訳ありません。 よろしくお願いいたします

質問者が選んだベストアンサー

  • ベストアンサー
  • cocky
  • ベストアンサー率57% (232/402)
回答No.1

CGIプログラム側から見ると、 ○「GET」の場合  環境変数「QUERY_STRING」で値が渡される  データがOSで認められた以上の大きさになると、値が環境変数に収まらなくなりデータが途中で切れてしまう ○「POST」の場合  Formの値は標準入力(STDIN)に渡され、データの長さは環境変数「CONTENT_LENGTH」に入る  データの長さはOSに依存しないため、大きなデータでも問題なく渡せる という違いがありますね。 一方、CGIを使うユーザー側から見ると、GET methodの場合はURLの後に「http://hogehoge/foo.cgi?input=xxx」というような形で引数を指定すると、Formからデータを入力したのと同じような効果が得られるのに対し、POST methodしか対応していないCGIでは、基本的にFormにデータを入力してやらないとプログラムが正しく動かない、という違いがあります。 そのため、検索エンジン等の場合は検索結果に対して直リンクが張りやすいGET methodを使っているところがほとんどです。 セキュリティ的にはどちらも大した違いはありませんが、Formに入力したデータがブラウザの「アドレス」欄に表示されない分だけ、ややGET methodの方が有利といえるでしょうか。

u16
質問者

お礼

よく分かりました。ありがとうございます。 ちなみに、最後のくだりは、POSTのほうが有利の間違いではないですか? GETはアドレス欄に取得値が表示されるのですよね?

その他の回答 (2)

  • cocky
  • ベストアンサー率57% (232/402)
回答No.3

ありゃ、確かに最終行間違えましたね。 そこは「POST methodの方が有利」の間違いです。(^^;;

  • ykc
  • ベストアンサー率29% (28/95)
回答No.2

メリット/デメリット、またはセキュリティという面でみると、ホストのアクセスログや、ブラウザのabout:cache、about:globalでURLの参照すると、GETの内容が見えてしまいます。 たとえばGETを利用してpasswordを送信した場合は、そこからpasswordがモレる可能性をはらんでいます。

関連するQ&A