【Web初心者】HTTPメソッドの種類と違い

数多く存在するHTTPメソッドの種類とそれおぞれの役割について説明していきます。また、その中でも特に頻繁に使われるGETとPOSTの違いについても詳しく書いています。

HTTPメソッドの種類

ブラウザなどのクライアントがWebサーバーにHTTPリクエストを行う際、要求の内容を伝えているのが、HTTPリクエスト内に含まれているHTTPメソッドです。

HTTPメソッドは、サーバに対して要求したい内容ごとにいくつかの種類に分かれており、以下で詳細について説明していきます。

GET

Webサイトなどを閲覧する際に、HTMLファイルや画像などのデータを取得するため利用するメソッドです。

また、データを取得するのに必要なデータをサーバに送信する際にも使用されます。

URL内で指定した情報を取得するGETメソッドは、最も利用頻度の高いメソッドです。

POST

GETの次に利用頻度の高いメソッドであり、そして最も役割が多いメソッドです。

主にデータの作成や追加などの処理を行うために利用され、具体的にはフォームに入力された情報の送信などに利用されます。

HEAD

HTTPヘッダの情報だけを取得したい際に使用するメソッドです。

HEADメソッドへのレスポンスにはボディが含まれず、ヘッダのみが返ってくるため、ネットワークの帯域を節約しながらデータの更新日時やデータのサイズを取得できます。

PUT

主にデータをアプロードする際に利用するメソッドです。PUTメソッドはデータの内容の更新データの作成という2つの側面を持っております。

サーバ上に既に存在しているデータに対し、PUTリクエストを行うとデータの更新を行い、「200 OK」のステータスコードと共にレスポンスボディには更新後の内容が返却されます。

サーバ上にまだ存在しないデータをPUTメソッドでリクエストすると、「201 Created」が返ってきて、ボディには作成後の内容が返却されます。

また、PUTメソッドはWebサーバ上のデータを書き換えることができてしまうため、利用できないように制限されている場合があります。

DELETE

サーバ上のデータに対し、削除の要求を行うメソッドです。PUTメソッドと同じように、Webサーバ上のデータを削除されてしまう可能性があるため、利用できないように制限されている場合が多いです。

CONNECT

Webサーバに接続する際に別のサーバを中継する場合には利用するメソッドです。connectメソッドは悪用される危険性があるため、制限されている場合が多いです。

OPTIONS

利用可能なメソッドを問い合わせて確認するために利用されるメソッドです。PUTやDELETE、CONNECTメソッドのように利用が制限されているHTTPメソッドを、OPTIONSメソッドを利用することにより事前に確認することができます。

レスポンスに含まれるAllowヘッダ内に含まれるメソッドが利用可能なメソッドとなります。

TRACE

WebサーバとWebブラウザの通信の経路を確認する場合に利用するメソッドです。悪用される可能性があるため、制限されている場合が多いです。

GETメソッドとPOSTメソッドのパラメータ送信方法の違い

GETメソッドとPOSTメソッドは両方とも指定した情報をWebサーバから取得するために、サーバに対して必要な情報を送信する機能を持っています。その使い分けについて解説していきます。

GETメソッドは、リクエストを送信する際のパラメータをURLの後ろにつけて、メッセージヘッダにその内容を含んで送信します。

形式としては、「URL?送信する値の名前=送信する値&送信する値の名前=送信する値」のように、URLの後に?がつき、値の名前と値は「=」で区切られます。送信する値が複数ある場合には「&」で繋いで並びます。

例えば、idとパスワードを入力してログインするようなサービスのGETメソッドを用いて実現した場合にはリクエストヘッダは以下のようになります。

リクエストヘッダ
GET /login.html?id=入力したid&psaa=入力したパスワード

POSTメソッドはGETメソッドとは異なり、データを送信する場合のリクエストの内容はリクエストヘッダではなく、リクエストボディに格納してリクエストを送信します。

POSTメソッドを利用してidとパスワードを送信する際には、リクエストヘッダとリクエストボディは以下のようになります。

//リクエストヘッダ
POST /login.html HTTP/1.1

//リクエストボディ
id=入力したid&psaa=入力したパスワード

GETメソッドとPOSTメソッドを使い分ける理由

上の段落で説明したように、GETPとPOSTはサーバに対して同一のリクエストを行う際にも、以下の理由から異なる方法でパラメータを送信します。

  • サーバに対して送信するパラメータの内容が、個人情報に関わるものなどの理由で第三者に知られたくない場合。この場合には、POSTメソッドを利用することが推奨されます。URLに送信する内容が含まれてしまうと、第三者に意図せず知れ渡り悪用される可能性があるためです。
  • 大量のパラメータを送信する場合。chrome(1000文字まで)やsafari(4096文字まで)などのブラウザでは、URLの文字数に制限を求めている場合が多いです。そのためパラメータがかなり多い場合にGETメソッドを利用してリクエストを送信すると、文字数の問題で、サーバにリクエストできない場合があり、この場合にもPOSTメソッドを利用することが望ましいです。
  • ショッピングサイトで検索を行うなど、特に機密情報を含まないようなパラメータの送信にはシンプルなGETメソッドが利用されることが多いです。

まとめ

HTTPメソッドの種類やその使い方についてご理解いただけたでしょうか。

他にもHTTPリクエストやHTTPレスポンスについて、HTTPリクエストを行った際のステータスコードについても記事を書いていますので是非そちらもご覧ください。