本記事では、PHPなどのweb系言語で必ず知っておきたい、
GETとPOSTの違いとその使い分け方について解説していく。
GETとPOSTの使い方
PHPなどのweb系言語の場合、GETとPOSTというパラメータの送信方法を使用することで、プログラム間で値の受渡しを行うことが可能だ。具体的な使い方は以下の通り。
GETの使い方
GETは、formタグのmethod属性に、”get”と記載することで使用が可能になる(GETメソッド)。
HTML
<form action="/get-post-sample.php" method="get">
<input type="text" name="keyword">
<input type="submit">
</form>
PHP
<?php
var_dump($_GET['keyword']);
入力欄に「test」と入れた場合の出力結果
string(4) "test"
POSTの使い方
POSTパラメータは、formタグのmethod属性に、”post”と記載することで使用が可能になる(POSTメソッド)。
HTML
<form action="/get-post-sample.php" method="post">
<input type="text" name="keyword">
<input type="submit">
</form>
PHP
<?php
var_dump($_POST['keyword']);
入力欄に「test」と入れた場合の出力結果
string(4) "test"
送られてきたパラメータはPHP標準の変数に格納されるので、そこから取得することが可能だ。
- $_GET変数 :送られてきたgetパラメータが格納されている変数
- $_POST変数:送られてきたpostパラメータが格納されている変数
- $_REQUEST変数:送られてきたget、postパラメータ両方が格納されている変数
使い方自体は、 form要素のmethod属性を”get”とするか”post”とするかの違いだけだ。
では次により具体的なGETメソッドとPOSTメソッドの違いについて説明していく。
GETメソッドとPOSTメソッドそれぞれの特徴
具体的なGETメソッドとPOSTメソッドの違いは以下
GETメソッドの特徴
GETメソッドには、次のような特徴がある。
- URLにパラメータが付加される
- 文字数制限がある
- URLをパラメータ付きで保存・共有・編集できる
一つずつ説明していく。
①URLにパラメータが付加される
GETメソッドでリクエストを送ると、そのパラメータのキーと値がURLに付加される。
以下のサンプルプログラムと、「test」と入力して送信した後のURLを確認して欲しい。
HTML
<form action="/get-post-sample.php" method="get">
<input type="text" name="keyword">
<input type="submit">
</form>
送信後URL
/get-post-sample.php?keyword=test
「?keyword=test」の部分に注目して欲しい。
?の後に、キー(keyword)、そして=で繋いで入力した値(test)が追加されているのが分かる。
もし2つ以上のデータを送る場合は、間に&が入る。
/get-post-sample.php?keyword=test&page=2
このように、GETメソッドを使うと、URLにパラメータが付加されるのがGETメソッドの最大の特徴である。
②文字数制限がある
GETメソッドを使うと、GETリクエストのURLに文字数制限が発生する。
理由は、URLにパラメータを付加して送るためだ。
最も文字数が少ないブラウザはIEで、最大でも2048文字までしか使えない。
なので、GETメソッドを使う場合は、あまりに長いリクエスト値を送信するような設計は避けると言うことを覚えておこう。
③URLをパラメータ付きで保存・共有・編集できる
GETメソッドを使う場合、URLにパラメータが全て記載されるので、パラメータごとURLを保存・共有・編集でき、便利だ。
例えば、フォーム経由でなくても、パラメータ付きURLにアクセスするだけで、ダイレクトに該当のページへ遷移することが可能だ(POSTだと、URLにパラメータが付加されないので、フォームを経由する必要がある)。
例として、以下のように予めパラメータを付加したURLにアクセスすると、フォームからtestと入力したときと同じ結果が得られる。
/get-post-sample.php?keyword=test
もちろんURLパラメータの一部を手動で書き換えることも可能だ(「?keyword=test」→「?keyword=sample」といった感じ)。
そのほか、パラメータつきのURLをブックマークに保存したり、誰かに共有することも可能。
つまるところ、開発者、及びユーザにとって、実は使い勝手の良いのがGETメソッドなのである。
GETメソッドを使う場合、セキュリティに注意
GETメソッドは上記のように便利な反面、パラメータがユーザにモロバレの状態になってしまうため、セキュリティには十分注意しよう。
例えば、プログラムやサーバ上の大事な情報をリクエストパラメータに設定したり、ユーザの個人情報をGETパラメータに設定するといったことだ。
そうゆうときは次で説明するPOSTメソッドを使うようにしよう。
POSTの特徴
POSTメソッドには、次のような特徴がある。
- パラメータが見えづらい
- 文字数制限がない
- セキュリティ的にGETよりは優れている
基本的にはメリットデメリットは、GETの裏返しだと思って貰えば良い。
①パラメータが見えづらい
ブラウザの開発者ツールなどを使えば見ることも可能だが、”わざわざ調べる”ということをしない限りPOSTメソッドで送られたパラメータがユーザに見えることはない。
②文字数制限がない
パラメータの送信にURLを使わないので、基本的には文字数を気にせず送信することが可能だ。ただし、プログラムやサーバの設定で任意に長さを制限することは可能。
③セキュリティ的にGETよりは優れている
POSTメソッドで送られたパラメータがユーザに見えることは基本的にはないので、その分セキュリティ的にはGETメソッドより優れていると言えるだろう。
【ケース別】GETとPOSTの使い分け方
GETメソッドとPOSTメソッドの違いが理解できたところで、
では実務上、GETとPOSTはどんな使い分けをするのが正解と言えるだろうか。
答えは概ね以下のようになる。
- GET:情報を取得するとき
- POST:情報を登録するとき
「情報の取得系はGET、情報の登録系はPOSTを使う」と言う風に覚えておけば、概ね正解だろう
以下は主要フォーム別に、対応する推奨メソッドを一覧化したものだ。参考に。
検索フォーム |
GET |
ログインフォーム |
POST |
メールフォーム |
POST |
ページャー |
GET |
カレンダー表示 |
GET |
スケジュール登録 |
POST |
申し込みフォーム |
POST |
関連記事
https://www.php.net/manual/ja/reserved.variables.get.php
https://www.php.net/manual/ja/reserved.variables.post.php
https://www.php.net/manual/ja/reserved.variables.request.php
[…] $_POSTと$_GETの使い分けですが説明すると長くなるのでこの記事を読めば分かると思います。 […]