• ベストアンサー

GETとPOSTの違い

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

  • u16
  • お礼率40% (100/250)
  • CGI
  • 回答数3
  • ありがとう数33

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

  • ベストアンサー
  • 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

  • post と get

    postとgetの両方でデータ送信が行われる可能性がある場合(あるときはpost、あるときはget)に簡単に効率よくデータを変数に入れてやる方法ってありますか? 最初は$_REQUEST を使っていたのですが、これではクッキー情報も入ってしまったため、これはやめました。そこで今は下のような方法を考えています。 if(postならば){ while(list ($key, $val) = each($_POST)) { $INPUT[$key] = $val; } } else {//getなら while(list ($key, $val) = each($_GET)) { $INPUT[$key] = $val; } } ただ、検索の仕方が下手なのか、受信した送信形式がPOSTかGETなのかということを知る方法がわかりません。 どなたかアドバイスを下さい。

    • ベストアンサー
    • PHP
  • 「GET」と「POST」の違い

    初歩的で恐縮ですが、「GET」と「POST」の機能の違いを教えて下さい。あと、双方のメリット、デメリットも教えていただけると助かります。すいませんが、よろしくおねがいします。

  • $_SESSIONと、POSTやGETの違い

    SESSION ・クッキーにセッションIDを作り、データをサーバーへ送信して保存。 ・セッションIDを元に、送受信系のもので送られ保存されたデータをどのページでも取得できる。 ・セキュリティが強い。 GET ・クッキーにセッションIDを作り、データをサーバーへ送信して保存。 ・セッションIDを元に、送受信系のもので送られ保存されたデータをどのページでも取得できる。 ・URLとして送信される。 ・アンカータグからも送れる。 ・セキュリティが弱い。 POST ・クッキーにセッションIDを作り、データをサーバーへ送信して保存。 ・セッションIDを元に、送受信系のもので送られ保存されたデータをどのページでも取得できる。 ・セキュリティが強い。 ・大量のデータ向け。 GETとの違いは分かるのですが、POSTとSESSIONの違いが良く分かりません。 $session_start(); $_SESSION["abc"] = "エービーシー"; のようにセッションを作って変数に格納し $session_start(); echo $_SESSION["abc"]; のように他のページで変数を使うことができますが、 POSTやGETも他のページで使えるので自動でセッションIDが作られていて SESSIONやPOSTやGETなどの送受信系のもので保存されたデータは 送受信系のものでデータを自由に取得できるのかなと思い試してみると $_SESSION["abc"]で送信したデータを他のページで$_SESSION["abc"]で取得すると正常に動き、 $_SESSION["abc"]で送信したデータを他のページで$_GET["abc"]で取得するとエラー、 $_SESSION["abc"]で送信したデータを他のページで$_POST["abc"]で取得するとエラー、 $_GET["abc"]で送信したデータを他のページで$_GET["abc"]で取得すると正常に動き、 $_GET["abc"]で送信したデータを他のページで$_POST["abc"]で取得するとエラー、 $_GET["abc"]で送信したデータを他のページで$_SESSION["abc"]で取得するとエラー、 $_POST["abc"]で送信したデータを他のページで$_POST["abc"]で取得すると正常に動き、 $_POST["abc"]で送信したデータを他のページで$_POST["abc"]で取得するとエラー、 $_POST["abc"]で送信したデータを他のページで$_SESSION["abc"]で取得するとエラー、 送信された方法と受信する方法が一致しないもの以外はエラーになりました。 おんなじ方法で送信と受信をしないとダメなのですね。

    • ベストアンサー
    • PHP
  • GETとPOST

    CGIなどに情報を渡す方法のGETとPOSTの違いについて詳しく教えて欲しいです。

  • POSTとGETについて

    POSTとGETについて2点質問が御座います。 PHPは最近手を付け始めましたので、初心者です。 (1)PHPでPOSTとGET両方使うことは出来ますでしょう   か? 内容:PHPファイルからCGIに値を引きつきたいのですが、テキストエリアのフォーム(POST)とCGIのリンク先に"hogehoge.php?id=xxxx"とGETのxxxxとPOSTのテキストエリアに記載した内容を2つ引き継ぎたいのですが、GETの方の値がCGIで反映されていません。 POSTとGETの両方引きつぎたいときはどのようにすれば良いでしょうか? (2)また(1)とは、別の話ですが、GETだけで2つの情報を引き継ぐことは可能でしょうか? "hogehoge.php?id=xxxx,?id2=yyyy"のようなイメージでxxxxとyyyyの両方を渡したいと思ってます。 どうかご教授宜しくお願い致します。

    • ベストアンサー
    • PHP
  • POST送信

    自社サイトのHTMLから外部のCGIにPOSTでユーザ名などの情報を送信をしなくてはなりません。 HTML内にhiddenで書き込みする事はセキュリティの面からNGとなっており、HTMLからformタグで自社サイト内のCGIを起動し、そのCGIから直接POST送信するように指定されてます。 直接POST送信させる方法が分かれば教えてもらえますでしょうか。 よろしくおねがいします。

    • ベストアンサー
    • CGI
  • POSTとGET

    Webサイトで検索すると、GETメソッドは、大きなデータを送信するは大変と書かれていますが、いったいどのくらいの容量のデータまでがGETで可能なのでしょうか? http://www.atmarkit.co.jp/fmobile/rensai/doja05/doja05.html いま、圧縮した100KB程度のデータを送信しようとしているのですが、GETメソッドで送信を行いたいのです。。。 GETメソッドで可能でしょうか??

    • ベストアンサー
    • PHP
  • $_POSTのものを$_GETとして使うのはなぜ?

    http://www.phppro.jp/school/phpschool/vol19/2 こちらの講座にあるサンプルコードで分からないところがあります。 schedule_edit.phpのサンプルでは if (isset($_POST["year"]) && is_numeric($_POST["year"]) && $_POST["year"] > 2000) { $year = $_POST["year"]; <form action="schedule_edit.php" method="post"> <input type="text" name="year" id="schedule-year" value="<?php print(htmlspecialchars($year, ENT_QUOTES)); ?>" /> <label for="schedule-year" id="label-year">年</label> formで入力されたデータはhtmlspecialchars($year, ENT_QUOTES)の$yearに格納され、 $_POST["year"]としてデータが渡り、 php側で$year = $_POST["year"];のように$_POST["year"]のデータが$yearに格納し直されています。わざわざ格納し直す理由も分からないのですが、一番知りたいところは schedule_list.phpのサンプル内ではPOSTでなくGETで渡されているところです。 if ($schedule_date == date("Ymd", mktime(0, 0, 0, $_GET["month"], $_GET["day"], $_GET["year"]))) $_POST["day"]ではなぜだめなのか分かりません。 この$_GET["year"]はschedule_edit.phpの$_POST["year"]を見ているわけではないのでしょうか。

    • ベストアンサー
    • PHP
  • GETはできるがPOSTができない、、、

    PHPの勉強を始めたのですが、困ってるので教えてください。 HTMLのformタグでmethod="GET"では、PHPへデータが渡るのですが、"POST"ではデータが渡りません。 このような場合、どのような原因が考えられるのでしょうか? 環境は OS: WindowsXP(SP2 PHP: 4.3.10 Apache: 2.0.52 すべてSJISで統一しています。 よろしくお願いします。

    • 締切済み
    • PHP
  • CGI:method="post"でもGETになる

    CGIで標準入力によりフォームデータを取得できないため、環境変数%ENV内の値を 調べましたところ、入力フォーム(html)のformタグでmethod="POST"と明示しているにも 拘らず、REQUEST_METHODの値がGETになっており、POST用のCONTENT_LENGTHも GET用のQUERY_STRINGも共に空になっております。 htmlでmethod="GET"と指定した場合には、REQUEST_METHODの値は正しくGETになり QUERY_STRINGからフォームデータを取得できます。 同じCGIをPC上のApache2.4でテストした結果、REQUEST_METHODはhtmlのmethod=~で 指定した通り正しくPOSTまたはGETとなり、それぞれフォームデータを 取得できることを確認いたしております。 この点についてプロバイダに問合せいたしましたが、サポート対象外ということで、 回答を得ることができませんでした。 このような現象の原因について、お心当たりのある方がおられましたら、 ご教示いただけないでしょうか、お伺いいたします。 (1)ホスト動作環境 a.CGIサーバ:Apache b. perl 5.10系 (2)PC動作環境 a.OS: Windows 7 b.ブラウザ: Internet Eexplorer 11 c.CGIサーバ: Apache 2.4 d. Activeperl 5.20

    • 締切済み
    • CGI