HTTP通信のGET、POSTの違い
http通信にはGETとPOSTといった2つの代表的なメソッドがある。
主にメソッドとかのhttp通信を掘り下げたような話は普通は意識しないが、ログインフォームや検索機能、メールフォームなどを持つWebサイトを作成する上では、セキュリティ上必ず意識する必要がある。
具体的な違い
GET
GETは最もポピュラーなメソッドで、Webサイトにアクセスしたり、検索をしたりする時に必ず使用される。
POSTとの一番大きな違いは、「URLにデータをくっつけて送信できる」事である。
例えば、example.comというWebサイトでhogehogeという文字列で検索したとする。この際に送信されるデータはsearch="hogehoge"であるが、(searchの部分はサイトによって変わる)このデータはURLにくっつき、追記する形で送信される。 具体的には「example.com?search=hogehoge」である。
これは複数個データを指定することができ、データの連結には「&」を用いる。例えば、同じくexample.comというWebサイトでhogehogeという文字列を検索し、検索結果の5ページ目を表示するようにデータを送信したとする。この際のURLは、「example.com?search=hogehoge&page=5」である。
これらのデータを受け取ったサーバは、URLに含まれるデータを展開/解読し、処理を実行している。
セキュリティ面では、URLにデータが含まれる以上、誰かにURLからデータを抜かれてしまう恐れがある。履歴にも残るので、共用PCでGETメソッドを使用したログインフォームのあるページにアクセスし、ログインすると、パスワードやユーザ名が丸見えになる可能性もある。
今まで散々GETをこき下ろしてきたが、利点もある。それは、ブックマークをする際にとっても便利なのだ。ブックマークは大抵、URLとページのタイトル、アイコンのみを記録する。POSTを使用した検索エンジンで検索しようとすると、データはPOSTリクエストにのみ記録されてしまうのでブックマークはできない。ただし、GETはURLにデータが記録されるのでブックマーク時にデータが保存できる。
POST
POSTはGETの次にポピュラー(かもしれない)なメソッドで、主にログインフォームやWeb上での決済、会員登録やメールフォームでのメール送信に使われてるかもしれない。
「かもしれない」というのは、実際にWeb決済や会員登録で使用されているか確認していなからである。だって面倒なんだもん。
GETとの一番大きな違いは、「ある程度データを隠蔽して送信できる」事である。
筆者は「ある程度」と書いたが、これは完全にデータを隠すことができないからである。実際にWebブラウザに搭載されている開発者用ツールで確認してもらいたいが、POSTで送信されたデータはhttps通信などを除き、暗号化されずに送信されるからである。
じゃあ隠せてないじゃん!って言われるかも知れないが、POSTでのデータ送信はアドレス欄(URL)などのユーザが普段操作する部分にはデータが表示されないからである。
これは裏を返せば、ブックマークや履歴などにデータは記録されず、ある一定のセキュリティを確保できる。ログインフォームで送信されたユーザ名とパスワードは、POSTリクエストにだけこっそり記録されてサーバに送信され、ユーザ名とパスワードが一致すればログイン成功とサーバから応答が来る。(注意して欲しいのは、クライアントとサーバの間で通信が傍受されると、https通信でない限り ユーザ名とパスワード、ログイン先のWebページなどの情報が抜かれてしまうこと!)
まとめ
GET... URLにデータを記録し送信する。セキュリティ的には危険。(検索キーワード等をブックマークする際に有用なので、全てがPOSTで良い訳でもない。)
POST...POSTリクエストにだけこっそりデータを記録し送信する。セキュリティ的には少し不安。(https通信だと安心)
お知らせ
内容を理解しやすいよう、一部の文章を変更しました。(2023/9/16)
コメント
コメントを投稿