はじめに
Hypertext Transfer Protocol(ハイパーテキスト・トランスファー・プロトコル)は、ハイパーメディア文書を転送するためのアプリケーション層プロトコル。ウェブブラウザとウェブサーバ間の通信用に設計されていますが、他の目的にも使用できます。クライアントはコネクションを開いてリクエストを行い、サーバー側のレスポンスを受信するのを待ちます。HTTPはステートレスプロトコルであり、2つのリクエストの間にサーバーがデータを保持することはありません。
HTTPリクエスト・メソッドとは何ですか?
HTTP は、指定されたリソースに対して実行されるアクションを示す一連のリクエストメソッドを定義します。与えられたリソースに対して実行されるアクションを示します。
GET | GETメソッドは指定されたリソースの表現を要求するもので、GETを使ったリクエストはデータを取得するためだけに使うべきです。 |
HEAD | HEADメソッドは、GETリクエストに対するレスポンスと同じレスポンスを要求しますが、レスポンスボディは要求しません。 |
POST | POSTメソッドは、指定されたリソースにリクエストを送信するために使用され、通常はサーバーの状態変更や副作用をもたらします。 |
PUT | PUTメソッドは、ターゲットリソースの現在のすべての表現をリクエストペイロードに置き換えます。 |
DELETE | DELETE メソッドは、指定されたリソースを削除します。 |
CONNECT | CONNECTメソッドは、ターゲットリソースで識別されるサーバーへのトンネルを確立します。 |
OPTIONS | OPTIONSメソッドは、対象リソースの通信オプションを記述するために使用します。 |
TRACE | TRACE メソッドは、ターゲットリソースへのパスに沿ってメッセージループバックテストを実行します。 |
PARCH | PATCHメソッドは、リソースに部分的な変更を適用するために使われます。 |
POSTリクエストとGETリクエストの違い
日々の開発の中で最も一般的なのはGETとPOSTですが、この2つの違いについて、いつPOSTを使うべきか、いつGETを使うべきかを探ります。
区別1
上の表から、GETリクエストはサーバー側でデータを取得するために使われることが多く、POSTインターフェースはサーバー側でデータを変更するために使われることが多いことがわかります。
区別2
POSTのパラメータはリクエストボディの中にあり、理論的にはサイズに制限はありません。
ディスティンクション3
セキュリティ | はい | いいえ |
冪等性 | はい | いいえ |
キャッシュ可能 | はい | 鮮度情報が含まれている場合のみ |
セキュリティ
ここでいう安全とは、基本的に読み取り専用という意味です。読み取り専用であることで、サーバー側で状態の変化を引き起こさないのであれば、メソッドは安全です。
冪等性
GET は読み込み操作だけを行うので、冪等です。標準的な POST リクエストはサーバー側の状態を変更するので、冪等ではありません。
キャッシュ可能
キャッシュ可能性とは、リクエストメソッドがブラウザによってキャッシュ可能かどうかを意味します。場合によっては、GET と POST はキャッシュ可能です。しかし、ほとんどのブラウザはGETキャッシュしかサポートしていません。
ディスティンクション4
GETとPOSTはどちらも基本的にTCPリンクです。GETは1つのTCPパケットを生成し、POSTは2つのTCPパケットを生成します。