短い答え
- GET はデータを取りに行くとき、POST はデータを送って登録などをするときに使います。
- GET は値を URL に載せ、サーバーの状態を変えない前提なので、ブラウザやキャッシュが気軽に送り直します。
- POST は値を本文に入れて送り、送るたびに登録が起きうるので、二重に送らない工夫が要ります。
深掘りの答え
違いは「何のために使うか」から決まります。
- 安全と冪等 (べきとう) GET はサーバーの状態を変えない (安全) 約束です。同じ要求を何度送っても、サーバーに起きることは 1 回送ったときと同じです (冪等)。返ってくる中身はデータが更新されれば変わりますが、送り直したせいで何かが増えることはありません。だから再読み込みや先読みで送り直されても困りません。POST はどちらの約束もしないので、送り直すと注文が 2 件入る、ということが起こります
- 値の置き場 GET は
?q=pythonのように URL に載ります。URL は履歴やサーバーのログ、共有したリンクに残るので、パスワードのような値は GET で送りません - 暗号 POST にしただけでは中身は守られません。通信を守るのは HTTPS です。「POST だから安全」は誤りです
作った物と結べると説得力が増します。たとえば「検索は結果を共有できるよう GET、会員登録は POST にし、送信中はボタンを押せなくして二重登録を防いだ」のように話します。
面接官が見ている点
- 「URL に載るか本文か」だけで終わらず、安全と冪等の考え方まで話せるか
- POST なら暗号になる、という誤解をしていないか
- PUT や DELETE を聞き返されたときに、同じ物差しで説明を広げられるか
