GET通信とPOST通信の違い、説明できますか?
HTTPとは
HTTP、つまり、ハイパーテキスト転送プロトコルは、クライアントとサーバー間の通信を可能にしています。
HTTPは、クライアントとサーバー間の要求/応答プロトコルとして機能します。
たとえば、クライアント(ブラウザー)がサーバーにHTTPレスポンスした場合、サーバーはクライアントにレスポンスを返します。レスポンスには、それに関するステータス情報が含まれ、レスポンスされたコンテンツが含まれる場合もあります。
HTTPリクエスト:GETとPOST
クライアントとサーバー間のリクエスト/レスポンスに対し、一般的に使用される2つの方法は、GETとPOSTです。
- GET:指定されたリソースからデータを要求する
- POST:処理するデータを指定したリソースに送信する
GET
クエリ文字列(名前と値のペア)は、GETリクエストの場合、URLの中に値が表示されます。
/test/demo_form.php?name1=value1&name2=value2
みたいな感じですね。
その他の特徴としては、
- GETリクエストはキャッシュできる
- GETリクエストはブラウザの履歴に残る
- GETリクエストはブックマークできる
- 他人に知られたくない情報はGETリクエストを使わない方がいい
- GETリクエストには制限があります
- GETリクエストは、データを取得するためにのみ使用する
POST
クエリ文字列(名前と値のペア)は、POSTリクエストの場合、HTTPメッセージ本文で送信されます。
POST /test/demo_form.php HTTP/1.1 Host: w3schools.com
みたいな感じですね。
そのほかの特徴としては、
- POSTリクエストがキャッシュされることはない
- POSTリクエストはブラウザの履歴に残らない
- POSTリクエストはブックマークできない
- POSTリクエストにはデータの制限がない
という点です。
POSTの方が安全
GET通信の場合、バイナリデータも許可され、送信されるデータはURLの一部になってしまうので、セキュリティGETはPOSTと比較して安全性が低くなります。
そのため、パスワードやその他の機密情報を送信するときは、GETを使用しないでください。
一方で、POSTの場合は、パラメータはブラウザの履歴やWebサーバーのログに保存されないため、GETよりも少し安全です。もちろんデータはURLに表示されません。
これとはまた別にHEADメソッドというものも存在するので、調べてみてね〜!