HTTP:GETとPOSTの違い

Web関連の開発をしていると必ずと言っていい程「GET」と「POST」という言葉が出てくるかと思います。
今回はHTTPの「GET」と「POST」の違いについてまとめてみます。

基本事項として

「GET」も「POST」もクライアントPCなどからサーバーに送信するデータ「リクエストパラメーター」を送信する方式となります。

Web開発初心者の方だと「GET」という言葉からサーバーからデータを取得するのかなあと勘違い(私だけ?)してしまうかもしれませんが、どちらも入力フォームのデータをサーバへリクエスト送信する際に使用します。基本的に以下の特徴を踏まえて、用途別に応じて適切に使い分ける必要があります。

GET送信の特徴

  • HTMLの<form>タグの属性に「<form method=”get”>」のように指定して送信します。
  • 「https://write-remember.com?id=abc&data1=123」のようにHTTPリクエストヘッダへリクエストパラメータが付与されます。
    URLの後の「?」がgetパラメータ開始という意味となり、パラメータが複数ある場合は「&」で区切って指定されます。
  • データをリクエストURLの末尾に付与して送信する方式となるため、Webサーバやプロキシサーバのアクセスログなどに残ることになります。
  • 他の人がURLを見ると、入力したデータが丸見えになってしまうリスクがあるので、ログイン画面などではIDやパスワードが他者から丸見えになるのでGET送信は使用するべきではありません。
  • URLの後に付与するのでデータ量(文字数)に制限が掛かる。(Internet Explorer のURLに使用できる最大文字数は最大2,048 文字)
  • GETはHTTPヘッダ情報に含まれるため、簡単に取得することが可能。
  • テキストデータのみ送信可能。

POST送信の特徴

  • HTMLの<form>タグの属性に「<form method=”post”>」のように指定して送信します。
  • HTTPのBODY部にリクエストパラメータが格納されます。
  • GETのようにURLの末尾にパラメータは付与されません。
  • 個人情報などの重要な情報や、データ量が多い場合はPOST送信を使用します。
  • POSTはBODY部分(form)に含まれるため、取得がちょっと面倒。
  • テキスト、バイナリどちらでも送信可能。
  • POST送信後にブラウザの戻るボタン押下で有効期間切れが発生する場合がある。
  • GETのように容易に他者からパラメータはわかりませんが、安全に個人情報を送信する際はPOSTに加えて暗号化などの処置を施す必要があります。