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メソッドを使っている方も多いと思います。しかし、このように改めて整理していみると、細かい違いに気がつくと思います。そして理解を深めることで、より正しい使い方ができます。