HTMLでプログラミングする時、初めてformタグを使ったら、ある疑問が出て来ました。
formタグのactionは「GET」メソッドと「POST」メソッドどちらを使った方が良いのか、という疑問が頭に浮かんだことはないでしょうか。
その疑問に答えるため、今回は「GETメソッド」と「POSTメソッド」の意味と違いについて説明します。
目次
- HTTPリクエスト
- GETメソッド
- POSTメソッド
- GETメソッドとPOSTメソッドの違い
- GETメソッドとPOSTメソッドの使いタイミング
HTTPリクエスト
GETとPOSTは、どちらもHTTPのリクエストメソッドです。
では、HTTPのリクエストとはなんでしょうか。
「HTTPリクエスト」とググって大体はこんなイメージが出てくると思いますが、少し分かりにくいかもしれません。では、擬人化をしましょう!
左側は大目という人(ユーザー)です。右側はサーバーという人です。
二人は会話しています。
大目さんはサーバーさんに一つお願いがあります。
そして、「サーバーさん、OOページを開いて!」と大目さんが言いました。
サーバーさんは大目さんのお願いを聞くと、OOページを準備して、大目に送ります。
「大目さん、こちらはOOページです。どうぞ!」とサーバーさんが大目さんに返事しました。
以上の会話の流れは、HTTPのリクエストとレスポンスです。
話を戻して、GETとPOSTどちらの簡単な定義もHTTPのリクエストです。
これから、詳しく説明します。
GETメソッド
GETという英語の意味は、「取得する」や「受け取る」などです。
HTTPでのGETの意味と上の英語の意味は大体同じです。
ただ、HTTPでのGETは、Webサーバーにリクエストをして、Webサーバーからのレスポンスで欲しいものを受け取るという意味です。
もっと、詳しく説明すると、GETメソッドの仕組みは「ユーザーのお願いは、HTTPのGETメソッドを通して、お願いの内容がURLにくっつけて、Webサーバーに送ります」という意味です。
ポケモンで例えると、GETメソッドはポケモンでの「モンスターボールでポケモンの名前(お願い)を貼って、ポケモンゲットする」みたいです。
例えば、ピカチュウをゲットしたい時、まずモンスターボールの上でピカチュウという名前のシールを貼って、ポケモンにモンスターボールを投げてゲットするというイメージです。
ここのポイントは、「お願いの内容がURLにくっつけて」(名前のシールを貼って)ということです。
そうすると、URLの上でGETの内容(お願い)が見えます。
以下はGoogle検索の例です。
ポケモンとをググると、上のURLのところは「search?q=ポケモン」という文があります。
この意味は「ポケモンを検索しました」です。
POSTメソッド
ここのPOSTの英語の意味は、「届ける」や「送る」などです。
HTTPでのPOSTは、Webサーバーにリクエストを送るという意味です。
手紙を届けると例えると、ユーザーはPOSTメソッドを通して手紙の中でお願いを書いて、封筒に入れて締めて、Webサーバーに送るというイメージです。
ポイントは、書いた内容は封筒に入れて締めるということです。
だから、外側からはユーザーのお願いは見えません。
では、POSTメソッドはどこにありますか。
答えはHTTPのBodyの中です。
だから、URLの上でPOSTの内容(お願い)が見えません。
例えば、Qiitaのログイン画面
ここのPOSTメソッドは「Log in to Qiita」というボタンに付いています。
IDとパスワードを入力して、「Log in to Qiita」というボタンを押すと以下の反応が出てきます。
URLのところを見てください。
さっき入力したIDとパスワードの内容はURLで見えません。
GETメソッドとPOSTメソッドの違い
-
URLでリクエストした内容は見えるかどうか。
GET メソッドはURLでリクエストした内容が 見えます。
POST メソッドは 見えません。
GETメソッドとPOSTメソッドの使うタイミング
GETとPOSTの基本的な機能は大体同じだから、どちらを使ってもいいです。
しかし、違いはURLでリクエストの内容が見えるかどうかということです。
この違いはとても重要です。
例えば、ログインする時、もしログインとのリクエストボタンはGETメソッドを使うと、ユーザーのパスワードは見えるになってしまいます。そして、パスワードを漏洩してしまうかもしれません。
だから、ログインのリクエストボタンは必ずPOSTメソッドを使います。
「そう言うと、セキュリティーのため全部POSTメソッドを使っていいじゃん!
GETメソッドはいりませんね!」とは言えません。
URLでリクエストを見られる点にもメリットがあります。
例えば、検索したページをお気に入りをしたい時は、そのページのURLを保存する必要です。
そのため、検索した内容(リクエストの内容)は必ずURLで書かなければなりません。
だから、基本的に検索ボタンはGETメソッドを使います。
-
まとめ
-
GETを使うタイミング
- URLでリクエストした内容を表示したい時
- お気に入りをしたい時
- 再読み込みの必要がある時
- SEOを作りたい時(クロールを行いたい時)
例)検索ボタン
-
POSTを使うタイミング
- URLでリクエストした内容を見せたくない時
- 個人情報に関すること
- セキュリティー性を高める時
例)ログインやパスワードがある場合
- 注意!
URLの長さは限界があります。
そのため、リクエストの内容は長い場合は、POST文を使った方がいいです。
理由はGETメソッドをつかうと、リクエストの内容はURLにくっつけるからです
POSTメソッドの長さにも限界はありますが、POSTメソッドの長さの限界はURLのより長いです。
-