HTTP 方法:GET と POST の比較
HTTP とは?
ハイパーテキスト転送プロトコル(HTTP)は、クライアントとサーバー間の通信を保証するために設計されたプロトコルです。
HTTP の仕組みは、クライアントとサーバー間のリクエスト・レスポンスプロトコルによって成り立っています。
例えば、ウェブブラウザがクライアントとして動作し、コンピュータ上のネットワークアプリケーションがサーバー側として動作することができます。
例:クライアント(ブラウザ)がサーバーに HTTP リクエストを送信し、サーバーがクライアントにレスポンスを返します。レスポンスにはリクエストの状態情報や要求されたコンテンツが含まれていることがあります。
HTTP の2つのリクエスト方法:GET と POST
クライアントとサーバー間でリクエスト・レスポンスを行う際、最もよく使われる方法は GET と POST の2つです。
- 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: japanitguide.com
name1=value1&name2=value2
POST リクエストに関するその他の注記:
- POST リクエストはキャッシュされない
- POST リクエストはブラウザの履歴に残らない
- POST リクエストはブックマークとして保存できない
- POST リクエストにはデータの長さ制限がない
GET と POST の比較
GET | POST | |
---|---|---|
戻るボタン/リフレッシュ | 無害 | データが再送信される(ブラウザはユーザーにデータが再送信されることを告知すべきである)。 |
ブックマーク | ブックマークとして保存可能 | ブックマークとして保存不可 |
キャッシュ | キャッシュ可能 | キャッシュ不可 |
エンコーディングタイプ | application/x-www-form-urlencoded | application/x-www-form-urlencoded 又は multipart/form-data(二進数データのための多重エンコーディング) |
履歴 | パラメータがブラウザ履歴に保管される | パラメータがブラウザ履歴に保管されない |
データ長の制限 | あり。GET 方法ではデータが URL に追加されるため、URL の長さに制限(最大長は 2048 文字)がある。 | なし |
データタイプの制限 | ASCII 文字のみ | 制限なし。二進数データも許可される。 |
セキュリティ | POST と比較してセキュリティが低い。送信されるデータが URL の一部だからです。 パスワードやその他の機密情報を送信するときは、絶対にGETを使用しないでください。 |
GET よりもセキュリティが高い。パラメータがブラウザの履歴やウェブサーバーのログに保存されないからです。 |
可視性 | データは URL に表示されるため、誰にでも見える。 | データは URL に表示されない。 |
その他の HTTP リクエスト方法
方法 | 説明 |
---|---|
HEAD | GET と同じですが、HTTP ヘッダーのみを返し、ドキュメントの本体は返しません。 |
PUT | 指定された URI 表示をアップロードします。 |
DELETE | 指定されたリソースを削除します。 |
OPTIONS | サーバーがサポートしている HTTP メソッドを返します。 |
CONNECT | リクエスト接続を透過的な TCP/IP チャンネルに変換します。 |
関連する Q&A
GET 方法の長さ制限は何文字ですか?
GET 方法では URL 最大 2048 文字までです。
POST 方法のデータタイプに制限はありますか?
いいえ、POST 方法ではデータタイプに制限はありません。
パスワードを送信するには GET と POST のどちらを使用すべきですか?
パスワードなどの機密情報を送信する際には、よりセキュリティが高い POST 方法を使用します。