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
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チャネルに変換します。 |