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)

コメント

このブログの人気の投稿

Ryzen 7 5800X & DDR4 128GB 搭載PCを組む

【php】ダウンロード回数をカウントするやつ