#1. はじめに
私は現在、業務未経験からエンジニアを目指して転職活動中です。先日面接させていただいた、とある会社で「HTTPにおけるGETとPOSTの違いを説明してください。」という質問にスムーズに答えられなかったので、GETとPOSTの違いについてまとめてみました。
ちなみにその時は、「POSTはデータベースを操作するリクエストで、GETはデータベースの操作を伴わないリクエストです」とお茶を濁し、面接担当者からは「半分正解だね」との苦し紛れの評価をいただいたのですが、改めて調べてみると、全然違ったので絶望しているところです。
#2. 結論
まず結論から書いてしまうと、GETとPOSTはどちらもフォームなどに入力したデータをWebサーバーへ送ることのメソッドだが、その送信方法が異なる。(つまり僕の回答はダメダメだった!!)
- GET: URLの後ろにデータを付与して送る
- POST: HTTPリクエスト内のメッセージボディにデータを含めて送る
つまり、GETメソッドでデータを送る際には、URLにデータが付与されているため、送ったデータがブラウザの閲覧履歴に残ってしまう。一方で、POSTメソッドを利用する際は、メッセージボディ内にデータが組み込まれるため、閲覧履歴は残らない。
#3. もう少し詳しく
結論だけ読めば、GETとPOSTの違いがわかるが、「HTTPリクエスト?、メッセージボディってなに…?」っていう僕のような人に向けてもう少し詳しく解説してみる。
##3-1. HTTPの基本動作
HTTPは、「クライアント(Webブラウザ)からの要求」と「サーバーからの応答」というやりとりを行い、Webサイトの閲覧などを行うことができる。この時の、「クライアントからの要求」をHTTPリクエスト、「サーバーからの応答」をHTTPレスポンスと呼ぶ。
##3-2. HTTPメッセージ(リクエスト)の構成
開始行 |
---|
メッセージヘッダー(ブラウザの種類やデータタイプなどを伝える) |
空行(メッセージヘッダーの終わりを伝える |
メッセージボディ(サーバーにデータを送るために使われる) |
##3-3. GETとPOSTのデータ送信方法
会員サイトへのログイン時を例に取るとユーザー名:Mr.hoge、パスワードをhoge123とした場合、GETとPOSTのデータ送信方法は以下の通り。
開始行| GET /login.html?name=Mr.hoge&pass=hoge123
開始行|POST /login.html HTTP/◯◯(version)
メッセージボディ| name=Mr.hoge&hoge123
上記の通り、GETメソッドの場合、URLにユーザー名とパスワードが含まれ、それがそのままブラウザの閲覧履歴に残ってしまい、危険。パスワードや氏名、住所などの個人情報をサーバーに送る際は、POSTメソッドを使う。
#終わりに
先日の面接では、「オブジェクト指向について説明してください」という質問にもまったく対応できなかったので、次回はオブジェクト指向とはなんぞやについて自分なりにまとめてみようと思います。先日の面接はボロボロでしたが、この記事が、僕のような業務未経験のエンジニア志望の方に少しでも役立つと嬉しいです。
ここまで読んでいただきありがとうございます。間違い等ありましたら、ご指摘いただけると幸いです!