HTTP 1.1には8つのメソッドがあります。業務をしていく中で、使うことはよくありますが、改めてきちんと学んでみましょう。

HTTPメソッドとは

対象となるリソースに対して「何をしたいか」を指示する文字列です。HTTP 1.1には8つのメソッドがあります。それ以外にもよく使われるPATCHを加えて9つのメソッドをまとめていきます。実際によく使われるものは5つとなります。

メソッド名説明
GET特定のリソースを取得するメソッド
POST特定のリソースを追加するメソッド
PUTすでに存在しているリソースを更新するメソッド。存在しない場合は新規作成を行う。
PATCHすでに存在しているリソースの一部分を更新するメソッド
DELETE特定のリソースを削除するメソッド
HEADヘッダー情報のみ取得するメソッド
CONNECTプロキシに対して目的のWebサーバへの透過的な伝送路(トンネル)を確立するよう要求するメソッド
OPTIONS利用できるメソッドの一覧を取得するメソッド
TRACEクライアントからWebサーバに対して送信した内容をそのまま返すメソッド

GET

GETメソッドは特定のリソースを取得するメソッドです。おそらく一番使用するメソッドだと思います。実際の使用例はクライアントからWebサーバに対して、HTMLファイルや画像ファイル、動画ファイルなどを取得するときに使われます。

セキュリティ観点で気をつけることがあります。GETメソッドはURLに情報が含まれるため、パスワードや個人情報などの機密情報をGETリクエストで送信してはいけません。この場合、はPOSTメソッドを使います。

GETメソッドは情報を取得するメソッドなので、送信することはできないのでは?と思われたかもしれません。実はGETメソッドでもパラメータという形でクライアントからWebサーバに送信することが可能です。GETメソッドでURIを指定した時に、URIの後ろに文字列をつけることで送信できます。

URLにパラメータが含まれるということはブラウザのアドレス欄に表示されてしまうということです。

POST

POSTメソッドは特定のリソースを追加するメソッドです。実際の使用例はユーザ登録やログインなどがあります。ユーザ登録やログインするときはユーザ名やパスワードなどを入力したあと、POSTメソッドでWebサーバに送っています。

POSTメソッドではパラメータはブラウザのアドレス欄に表示されません。これはパラメータがリクエストボディ内に格納されているからです。またWebサーバのアクセスログにもパラメータは残りません。

PUT

すでに存在しているリソースを更新するメソッドです。ファイルのアップロードやコンテンツの更新するときなどに使われます。もしリソースが存在しない場合はリソースの新規作成を行います。

PATCH

すでに存在しているリソースの一部分を更新するメソッドです。例えばユーザプロフィールがあり、そのうち写真を変更したいというときにPATCHメソッドが使われます。

DELETE

特定のリソースを削除するメソッドです。コンテンツを削除するときに使われます。

HEAD

ヘッダー情報のみ取得するメソッドです。実際の使用例はリソースの存在確認や最終更新日時の確認、データのサイズの確認などです。つまり主にリソースの情報を取得するために使用されます。

CONNECT

プロキシに対して目的のWebサーバへの透過的な伝送路(トンネル)を確立するよう要求するメソッドです。リバースプロキシとの通信などで使われています。

OPTIONS

利用できるメソッドの一覧を取得するメソッドです。プリフライトリクエストで使われています。これは実際のリクエストの送信前にOPTIONSメソッドによるHTTPリクエストをクロスオリジンに向けて送信し、実際のリクエストを送信しても安全かどうかを確かめる仕組みです。プリフライトリクエストはCORSという仕組みの中で使われています。

TRACE

クライアントからWebサーバに対して送信した内容をそのまま返すメソッドです。こちらのメソッドはあまり使用されていないメソッドです。昔はTRACEメソッドを悪用する方法があったらしいですが、今ではブラウザで対策されています。

PUT と POSTの違い

1. 目的の違い

PUTメソッド

リソースの更新や置き換えを意図して使用されます。既存のリソースを更新するために使用されることが多いです。

POSTメソッド

新しいリソースの作成やデータの送信を意図して使用されます。データを送信して処理を行うために使用されます。

2. 冪等性の違い

PUTメソッド

通常は幂等性があるとみなされます。同じリクエストを複数回送信しても、最終的な結果が変わらないことが期待されます。

POSTメソッド

通常は幂等性がないとみなされます。同じリクエストを複数回送信した場合、重複する操作が発生する可能性があります。

3. 使用例の違い

PUTメソッド

ファイルの更新、データベースのレコードの変更、APIのリソースの更新など。

POSTメソッド

フォームのデータ送信、新しいコンテンツの作成、コメントの投稿など。

PUT と PATCHの違い

PUTメソッド

既存のリソースを完全に置き換えるために使用されます。リクエスト本文に含まれるデータが、サーバ上のリソース全体に反映されます。PUTはリソースが存在しているかどうかわからないときに使用します。リソースが存在しているときは更新をし、リソースが存在しない場合は新規作成を行います。

PATCHメソッド

既存のリソースの一部を変更するために使用されます。リクエスト本文に含まれるデータが、サーバ上のリソースの一部分に適用されます。PATCHはリソースがすでに存在しているときに更新をかける処理です。

まとめ

普段の業務では何気なく、HTTPメソッドを使っている方も多いと思います。しかし、このように改めて整理していみると、細かい違いに気がつくと思います。そして理解を深めることで、より正しい使い方ができます。