「GETメソッド」と「POSTメソッド」の違い
予備知識
| 用語 | 意味 |
|---|---|
| Webブラウザ | ホームページを見るときに使うソフト |
| サーバ | サービスや機能を提供する側のコンピュータ |
| Webサーバ | ホームページ関連の仕事をしているサーバ |
| URL | ホームページの住所。ホームページの置いてある場所とかファイル名とかを示す情報 |
| HTTPリクエスト | WebブラウザからWebサーバに対して出されるお願い |
| HTTPリクエストメソッド | WebブラウザからWebサーバに対して出されるお願いの種類 |
それぞれの用語の意味
| 用語 | 意味 |
|---|---|
| GETメソッド | Webサーバに送る値をURLにくっつけて送るやり方。本来の意味は「このページをくれよ」な お願い |
| POSTメソッド | Webサーバに送る値を見えないところにくっつけて送るやり方。本来の意味は「このデータをやるから追加しとけ」な お願い |
似ているところ
どちらもHTTPリクエストメソッドです。
WebブラウザさんからWebサーバさんに対して出されるお願いの種類です。

違うところ
WebブラウザさんからWebサーバさんに値を渡すときの、値の渡し方が違います。
GETメソッドは渡す値をURLの後ろにくっつけます。
例えば
https://wa3.i-3-i.info?param1=value1¶m2=value2
のような形です。
POSTメソッドは渡す値を人間様の目には見えないところにくっつけます。
そのためURLは
https://wa3.i-3-i.info
のような形になります。
あまり長ったらしくはなりません。
例えば、あなたが、お手紙を送るとしましょう。
前提として、送り先の住所がURLです。
封筒の宛先が書いてあるところに、ついでに内容も書いて送るのがGETメソッドです。
内容を書いた紙を封筒の中に入れて送るのがPOSTメソッドになります。
宛先部分に内容が書いてあるGETメソッドは、郵便配達の人にも書いてある内容が読めてしまいます。
POSTメソッドでは郵便配達の人は書いてある内容を(ズルをして封筒を開けてしまわない限りは)読めません。
個人的な使い分け
用語の使い分けではなく実際の使い分けですが、値をWebサーバさんに渡す必要がある場合は、できる限りPOSTメソッドを使うようにしています。
POSTメソッドが使えない場合や、使うと不都合が生じるときのみGETメソッドで渡しています。
理由は
1.GETメソッドはPOSTメソッドと比べて渡せる情報量が少ない
2.GETメソッドは渡した値が履歴に残る
からです。
特に2番目の方が大きな理由ですが、順番に見ていきましょう。
GETメソッドはURLにくっつけて値を送ります。
URLの長さの限界が送れる値の量の限界です。
POSTメソッドにも限界はありますが、今のところ、POSTメソッドの方がGETメソッドよりも多くの情報を送れるようです。
これが「1.GETメソッドはPOSTメソッドと比べて渡せる情報量が少ない」です。
封筒の宛先部分に頑張って小さい文字を書くよりも便箋に書いて封筒の中に入れて送った方が、たくさんの情報を伝えられますよね。
それと同じです。
また、GETメソッドはURLにくっつけて値を送ります。
URLを見れば、渡した値が分かってしまいます。
履歴としてそのまま残ってしまいますので、複数人で同じパソコンを使っている場合は、同じパソコンを使っている他の人に渡した値が分かってしまいます。
プロキシという仕組みではURLを記憶しておくので、場合によっては全然関係ない別の人にも渡した値を知られてしまいます。
最悪の場合は、検索エンジンさんに載ってしまって、全世界の人に知られてしまうかもしれません。
特にパスワードを渡す場合は、絶対にGETメソッドを使わないでください。
大事な情報を封筒の宛先部分に書いてはいけません。
(外からは見えない)中の便箋に書いてください。
これがPOSTメソッドを優先的に使っている理由です。
注意点として「この場合はPOSTメソッドではなくGETメソッドを使うよ」という場合も あります。
それは
ページ番号的なものを渡すとき
です。
例えば『わわわIT用語辞典』の「新着用語」の2ページ目のURLは
https://wa3.i-3-i.info/newlist.html?p=2
です。
「p=2」の部分が「2ページ目(を表示してね)」を意味しています。
これをPOSTメソッドにすると
https://wa3.i-3-i.info/newlist.html
になります。
「2ページ目(を表示してね)」は見えないところに書かれます。
それぞれのページをお気に入りに登録したとしましょう。
GETメソッドの場合は「新着用語の2ページ目」がお気に入りに登録されます。
一方、POSTメソッドの場合は「新着用語の1ページ目」がお気に入りに登録されます。
「2ページ目」を表す情報が含まれないからです。
まとめると
1.値をWebサーバに渡さない:GETメソッド
2.値をWebサーバに渡す:基本的にはPOSTメソッド
3.Webサーバに渡す値も含めて1つのURLと見なせる:(パスワードのような他の人に見られてはいけない情報が含まれていない場合は)GETメソッド
という使い分けです。
備考
このページの説明は、本来の「GETメソッド」「POSTメソッド」の意味からは少し外れています。
本来の意味で言えば、GETメソッドは「このページをおくれ」な お願いです。
一方のPOSTメソッドは「このデータをやる(から追加しとけ)」な お願いです。
ちょっと違いますが、イメージは
GETメソッド:受け取るときに使う
POSTメソッド:送るときに使う
です。

とはいえ、現実問題、GETメソッドとPOSTメソッドの違いが気になるのはプログラムを作るときが多いはずです。
プログラムを作るときに意識することになるGETメソッドとPOSTメソッドの違いは、Webサーバに対する値の渡し方です。
そのため
GETメソッド:値をURLの後ろにくっつけて送るやり方
POSTメソッド:値を見えない所に隠して送るやり方
と表現しました。






