HTTP メソッド:GET対POST


最もよく使われる2つのHTTPメソッドは、GETとPOSTです。


HTTPとは?

ハイパーテキスト転送プロトコル(HTTP)は、クライアントとサーバー間の通信を保証するように設計されています。

HTTPは、クライアントとサーバー間のリクエスト-レスポンスプロトコルとして機能します。

Webブラウザはクライアントになり得ますが、コンピューター上のネットワークアプリケーションもサーバー側になり得ます。

例:クライアント(ブラウザ)がサーバーにHTTPリクエストを送信します。サーバーはクライアントにレスポンスを返します。レスポンスには、リクエストに関するステータス情報と、リクエストされた可能性のあるコンテンツが含まれます。


2つのHTTPリクエストメソッド:GETとPOST

クライアントとサーバー間でリクエスト-レスポンスを行う際、最も一般的に使用される2つのメソッドはGETとPOSTです。

  • GET- 指定されたリソースからデータをリクエストします。
  • POST- 指定されたリソースに処理対象のデータを送信します。

GETで送信されるパラメータは通常URLに表示されますが、POSTはフォーム経由で送信されてもURLに表示されないため、POSTのほうがより隠蔽性があります:


GETメソッド

クエリ文字列(名前/値のペア)はGETリクエストのURLで送信されることに注意してください:

/test/demo_form.php?name1=value1&name2=value2

GETリクエストに関するその他の注記:

  • GETリクエストはキャッシュ可能
  • GETリクエストはブラウザの履歴に残ります
  • GETリクエストはブックマークに保存可能
  • GETリクエストは機密データを扱う際に使用すべきではありません
  • GETリクエストには長さ制限があります
  • GETリクエストはデータの取得のみに使用すべきです

POSTメソッド

クエリ文字列(名前/値のペア)はPOSTリクエストのHTTPメッセージ本文で送信されることに注意してください:

POST /test/demo_form.php HTTP/1.1
Host: example.com
name1=value1&name2=value2

POSTリクエストに関するその他の注記:

  • POSTリクエストはキャッシュされません
  • POSTリクエストはブラウザの履歴に残りません
  • POSTはブックマークに保存できません
  • POSTリクエストはデータ長の制限はありません

GETとPOSTの比較

次の表は、GETとPOSTの2つのHTTPメソッドを比較したものです。

  GET POST
戻るボタン/更新 無害 データが再送信されます(ブラウザはユーザーにデータが再送信されることを通知する必要があります)。
ブックマーク ブックマークに保存可能 ブックマークに保存不可
キャッシュ キャッシュ可能 キャッシュ不可
エンコーディングタイプ application/x-www-form-urlencoded application/x-www-form-urlencoded または multipart/form-data。バイナリデータにはマルチパートエンコーディングを使用します。
履歴 パラメータはブラウザの履歴に残ります。 パラメータはブラウザの履歴に保存されません。
データ長の制限 制限あり。データ送信時、GETメソッドはURLにデータを追加します。URLの長さには制限があります(URLの最大長は2048文字です)。 制限なし。
データ型の制限 ASCII文字のみ許可されます。 制限なし。バイナリデータも許可されます。
セキュリティ POSTと比較して、GETは送信データがURLの一部であるため、安全性が低くなります。

パスワードやその他の機密情報を送信するときにGETを使用しないでください!
POSTは、パラメータがブラウザの履歴やWebサーバーログに保存されないため、GETよりも安全です。
可視性 データはURL内で誰にでも見えます。 データはURLに表示されません。


その他のHTTPリクエストメソッド

次の表は、その他のHTTPリクエストメソッドの一部を示しています:

メソッド 説明
HEAD GETと同じですが、HTTPヘッダーのみを返し、ドキュメント本文は返しません。
PUT 指定されたURIの表現をアップロードします。
DELETE 指定されたリソースを削除します。
OPTIONS サーバーがサポートするHTTPメソッドを返します。
CONNECT リクエスト接続を透過的なTCP/IPチャネルに変換します。
その他の拡張