こんにちは!むちょこです。PHPが大好きです!
今日は、GETメソッドとPOSTメソッドの違いとその使い分け方についてお話してみようと思います。
「長文読むのしんどい」「御託はいいから今どっちを使ったらいいのか知りたい」って方は、最後の場面別使い分け表だけ見てください☆
詳しく知りたい方は初めからどうぞ!
GETとPOSTの使い方
HTML+PHPの場合、GETでもPOSTでも、ほとんど同じような使い方で値の受渡しを行うことが可能です。
具体的な使い方は以下の通りです。HTML側はmethod属性の値、PHP側は変数名だけが違うことにご注目ください:)
GETの使い方
<form action="/search.php" method="get">
<input type="text" name="keyword">
<input type="submit">
</form>
<?php
var_dump($_GET['keyword']);
string(3) "PHP"
var_dump()は、変数の情報を返してくれる関数です。
http://php.net/manual/ja/function.var-dump.php
POSTの使い方
<form action="/search.php" method="post">
<input type="text" name="keyword">
<input type="submit">
</form>
<?php
var_dump($_POST['keyword']);
string(3) "PHP"
使い方だけ見ると、とてもよく似ていますね。
では、次の章でそれぞれどんな特徴があるのか見ていきましょう。
GETとPOSTの特徴
GETの特徴
GETメソッドには、次のような特徴があります。
URLにパラメータが付加される
GETメソッドでリクエストを送ると、そのパラメータのキーと値がURLに付加されます。先ほどの例の場合、送信後のURLはこのように変わります。
/search.php?keyword=PHP
?の後に、キー(keyword)、そして=で繋いで入力した値(PHP)が追加される形です。
もし2つ以上のデータを送る場合は、間に&が入ります。
/search.php?keyword=PHP&page=2
文字数制限がある
URLにパラメータを付加して送るため、ブラウザやサーバの設定によって使える文字数が制限されます。
最も文字数が少ないブラウザは (おそらく) IEで、最大でも2048文字までしか使えません。
GET メソッドを使用する場合、最大文字数は 2,048 文字から実際のパスの文字数を減算した文字数に制限されます。
Internet Explorer では URL に最大 2,083 文字が使用可能 – Microsoft
パラメータつきのURLを保存・共有できる
フォーム経由でなくても、URLに直接パラメータを付加するだけで、リクエストを送ることが可能です。
そのため、パラメータつきのURLをブックマークに保存したり、誰かに共有することができます。
例えば、前章の例で以下のように予めパラメータを付加してアクセスすると、フォームからPHPと入力したときと同じ結果が得られます。
/search.php?keyword=PHP
POSTの特徴
POSTメソッドには、次のような特徴があります。
パラメータが見えづらい
デベロッパーツールなどを使えば見ることも可能ですが、”わざわざ調べる”ということをしない限りPOSTメソッドで送られたパラメータは見えません。
文字数制限がない
パラメータの送信にURLを使わないので、基本的には文字数を気にせず送信することができます。
ただし、プログラムやサーバの設定で任意に長さを制限することは可能です。
全部POSTではダメな理由。GETのメリット
「全部POSTでいいじゃん派です」というコメントをいただいたので、それについてお答えします。
たしかにPOSTの方がパラメータは見えないし文字数制限もないし、一見優れているように見えるかもしれません。しかし、GETにはパラメータ付きURLを共有・保存できるという強みがあります!
たとえばこの記事のURLは以下のようになっています。
https://php-junkie.net/beginner/reserved_variables/get_post/
カスタムしてしまっているので少し分かりにくいですが、これも実は内部的にGETを使ってこのページ用のパラメータを渡しています。
カスタム前のURLはもっと分かりやすく、ページのIDをパラメータとして渡しています。
https://php-junkie.net/?p=345
このように、プログラムに渡したいパラメータがURLに含まれていることで「このページ見てね~。https://php-junkie.net/?p=345」とURLを誰かに共有するだけで相手はこの記事にアクセスすることが可能です。
もしも記事のIDがPOSTで受け取る仕様になっていたら、ユーザはまずこのサイトのトップページにアクセスしてこのページに繋がるフォーム(リンクではPOSTパラメータは渡せないので、記事にアクセスするためのフォームが必要です)を探して…という工程が必要になってきます。
ワンクリックで記事にアクセスできるのはGETメソッドのおかげなのです。
場面別使い分け表
GETは情報を取得するとき、POSTは情報を登録するときの利用が適しています。
検索フォーム | GET |
ログインフォーム | POST |
メールフォーム | POST |
ページャー | GET |
カレンダー表示 | GET |
スケジュール登録 | POST |
申し込みフォーム | POST |
計算機 | 仕様にもよりますが、どちらかというとGET |
もしこの表にない状況で、こんなときはどっちが良いの?と困ったら、リクエストフォームから送ってください。私の分かる範囲でしたら追加させていただきます♪
[…] […]
[…] 引用:https://php-junkie.net/beginner/reserved_variables/get_post/ […]