恥ずかしながら、今まで勘違いしていたのですが、それに気付く機会がありありましたので、これを機に勉強しなおして備忘録としてまとめておきます。
今まで勘違いしていたこと
名前の通り、getは何かを取得、postはフォームデータ等の何かを送信する、ためのものだと思っていましたが、間違いではないのですが、それだけではありませんでした。
getでも送信処理はできるし、postでも何かを取得することができる、また、DBに登録するしないや、レスポンスとして返す値はサーバが決めることなので、HTTPメソッドとは別次元の話であるということがわかりました。
勘違いに気付くきっかけ
参画したプロジェクトのHTTP通信関連のサービスクラスを覗いてみたら、全てpostメソッドで書かれていました。
おや?フォームデータを送信する処理じゃないのに、なんでpostなんだ?と思い調べてみて、勘違いに気付きました。
特に大きな違い
パラメータの渡し方の違いが大きいかと思います。
get
クエリパラメータで渡します。
クエリパラメータとは、URLの最後に?で付加するあれです。これを使って、サーバーにパラメータを渡します。
クエリパラメータを付与した状態で、ブックマークに登録できるので、保管はしやすいが、パラメータを第三者に見られるため、機密性の高い情報を送信するときはgetは使用するべきではない。
post
body部に含めて渡します。bodyに含めることで、第三者に見られる可能性が低くなり、セキュリティ面ではgetより高い特徴があります。ただ、postなら安全という話ではなく、機密性の高い情報であれば、暗号化は必須。
メリデメ
GET | POST | |
---|---|---|
パラメータの渡し方 | クエリパラメータ | body |
セキュリティ | 他人に見られやすいため、低い | 比較的高い |
パラメータの保管 | しやすい | しにくい |
参考にしたサイト、書籍
https://qiita.com/kanataxa/items/522efb74421255f0e0a1
https://gihyo.jp/book/2010/978-4-7741-4235-7