HTTP通信:GET通信とPOST通信の違い

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メソッドというものも存在するので、調べてみてね〜!