GETとPOSTの使い分け方法

こんにちは!むちょこです。PHPが大好きです!

今日は、GETメソッドとPOSTメソッドの違いとその使い分け方についてお話してみようと思います。

「長文読むのしんどい」「御託はいいから今どっちを使ったらいいのか知りたい」って方は、最後の場面別使い分け表だけ見てください☆

詳しく知りたい方は初めからどうぞ!

GETとPOSTの使い方

HTML+PHPの場合、GETでもPOSTでも、ほとんど同じような使い方で値の受渡しを行うことが可能です。

具体的な使い方は以下の通りです。HTML側はmethod属性の値、PHP側は変数名だけが違うことにご注目ください:)

GETの使い方

HTML
<form action="/search.php" method="get">
<input type="text" name="keyword">
<input type="submit">
</form>
PHP
<?php
var_dump($_GET['keyword']);
入力欄に「PHP」と入れた場合の出力結果
string(3) "PHP"
ヒント

var_dump()は、変数の情報を返してくれる関数です。
http://php.net/manual/ja/function.var-dump.php

POSTの使い方

HTML
<form action="/search.php" method="post">
<input type="text" name="keyword">
<input type="submit">
</form>
PHP
<?php
var_dump($_POST['keyword']);
入力欄に「PHP」と入れた場合の出力結果
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

もしこの表にない状況で、こんなときはどっちが良いの?と困ったら、リクエストフォームから送ってください。私の分かる範囲でしたら追加させていただきます♪

2 Comments

現在コメントは受け付けておりません。