1.はじめに
今回は、WebアプリケーションにおけるGETメソッドとPOSTメソッドの違いを解説します。
HTTPメソッドはHTTPリクエストをサーバーに送る際、指定のURIに対して、どのような処理をしてほしいかをサーバに伝えるための方法になります。HTTPメソッドの種類は8つありますが、そのうち使用する頻度が高いものとしては、数多くありません。特に、HTMLでサポートしているメソッドは、GETとPOSTのみですので、プログラミング初学者の方にとっては、その2つを押さえればHTTPメソッドについてはマスタしたも同然かと思います。しかし、初学者の方にとっては、このGETとPOSTの使用する際の区別の仕方が分からないという方もいるかと思います。そこで、HTTPメソッドについて説明しながら、GETとPOSTの違いを噛み砕いて解説していけたらと思います。
2.8つのリクエストメソッドについて-
繰り返しになりますが、HTTPメソッドはHTTPリクエストをサーバーに送る際、指定のURIに対して、どのような処理をしてほしいかをサーバに伝えるための方法になります。
HTTPリクエストには下記の8つのメソッドがあります。使用用途は主に下記の通りです。
GET:指定したURIの情報を取得する
POST:新しいデータやリソースを追加する
PUT:リソースの更新を行う
DELETE:リソースの削除を行う
HEAD:リソースのメタデータだけを取得し、レスポンスにはHTMLなどのボディが含まれない
OPTIONS:リソースがサポートしているメソッドの一覧を返す
TRACE:自分宛にリクエストメッセージを返す(ループバック)試験用に使用する
CONNECT:プロキシサーバーに対して目的のWebサーバへのトンネルを確立するように依頼する
例えば、ニュースを読むために、Yahooニュースへアクセスする際は、データの取得を目的としていますので、GETメソッドを使用しますし、ニュースを読んでコメントを投稿する際は、コメントの投稿を目的としていますので、POSTメソッドを使用します。
このように該当のURIに対して目的の動作を指定する際に、適切なHTTPメソッドと共にHTTPリクエストをサーバーに対して送ります。
3.HTMLでのHTTPメソッド
HTTPメソッドは8つありますが、そのうち頻度高く使用するメソッドは、CRUD(リソースの作成(Create)、読み込み(Read)、更新(Update)、削除(Delete)を表す)に対応しているメソッドであるPOST、GET、PUT、DELETEになります。
しかし、HTMLの<form>タグでは、GETとPOSTのみが対応しているため、情報の更新時に使用するPUTや情報を削除する際に使用するDELETEをGETやPOSTで代替する必要があります。
それでは、更新や削除を行う時にGETやPOSTのどちらを使用するのが正解になるのでしょうか。
4.GETメソッドについて
ここで本記事の疑問が増えてしまったので、一度整理してみましょう。
一つ目は、GETとPOSTの違いは何か。
二つ目は、更新や削除を行う際には、GETとPOSTを使用するのどちらがいいのか。
その二つを解決するために、もう少しGETとPOSTについてもう少し深ぼってみましょう。
まずは、GETからです。
そもそもですが、Webでは<a>要素をクリックするなどしてURIへアクセスすることで、情報を表示する仕組みです。この際、Webサイトへのアクセスのようなページの取得操作の場合はGETメソッドを使用します。GETメソッドの目的は情報の取得です。特定のURIへアクセスしたら同じ情報が得られるということ、またデータの作成や更新が行われないというのが、GETメソッドの使い方になります。
そのことを考慮して、<form>タグを使用した際の、GETメソッドの使い方について考えてみましょう。<form>タグ内のGETメソッドの場合、ターゲットURIと<form>タグ内のinputタグで入力した内容からURIを生成します。そうして入力された内容から、情報を取得します。基本的にGETメソッドで生成されたURIからは同じ情報が取得できるということになります。基本的に、と書いているのは、ログインしているアカウント情報やレコメンド機能などでページの表示内容が異なる場合があるためです。
例として検索システムが挙げられます。検索窓に検索ワードを入力します。そうすると検索ワードに応じてURIが生成されます。この操作によって生成されたURIは、ページが更新されない限りは、何度アクセスしても同じ内容が表示されますし、この操作で、Webのリソースに変更が加えられることはありません。
5.POSTメソッドについて
続いてPOSTメソッドについてです。
<a>タグではGETしか発行できず、POSTは<form>タグで発行することができます。
POSTはターゲットURIに<form>タグ内のinputタグで入力した内容を値として渡します。この際入力内容からURIの作成は行わず、HTTPリクエストのボディに値を添付して送ります。
そのため、GETのようにURIに入力内容が含まれることはありません。
また、リソースへの変更を行うことが目的のメソッドであり、何度も同じ操作をした際に結果が同じになるとは限らないという特徴もあります。
POSTを使用する例としては、先ほど挙げたようなコメント投稿やブログの記事の投稿などの機能で使用されることがあります。
6.まとめ – GETとPOSTの違い –
このように、HTMLにおいてのGETとPOSTには下記のような違いがあります。
- GETはURIの生成が行われるが、POSTはURIの生成が行われない
- GETは生成されたURIに入力内容が反映されるが、POSTはリクエストメッセージのボディに入力内容が含まれる
- GETは情報の取得が目的のメソッド、POSTはリソースの変更が目的のメソッド
- <a>タグなどではGETを使用して、POSTは発行できない
以上のことを考慮すると、更新や削除を行う時はPOSTを使用することをお勧めします。
理由としては、GETはリソースの変更が目的ではないということ、GETではURIが生成されるため、生成されたURIを直接入力する度にデータに変更されてしまうということが挙げられます。
上記のことを意識しながら、プログラミング学習を進めていただけると、良いかと思います。
ここまでHTMLではGET、POSTのみが使用できるというところに着目して、ここまで解説してきましたが、JavaScriptのAjaxでは、GETとPOST以外のメソッドを発行することも可能ですし、WebフレームワークでもGET、POST以外のメソッドを発行することが可能なものもあります。その辺りについても実装したいものや技術が決まったら、調べてみてもいいかもしれません。
今回は、ここまでになります。最後まで閲覧くださりありがとうございました。
-参考書籍-
Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)
– 画像出展 –
コメント