GET/POST


備忘録です。
間違いなどございましたらご指摘ください。

クライアントとサーバーのやりとり

Webにおいてサーバとクライアント間のやりとりは基本的にHTTPというプロトコルを用いる。
HTTPとは、WebサーバとWebクライアントの間でデータの送受信を行うために用いられるプロトコル。
Webの世界でのやりとりは基本的にリクエスト/レスポンスで成立。

  • クライアントからサーバへの要求することをリクエスト
  • サーバからブラウザへ応答することをレスポンス

HTTPの仕様

HTTPにはいくつかの仕様がきめられていて
GET/POSTというのはその仕様で取り決められたHTTPの一部。
(他にもHEAD/OPTIONS/PUT/DELETEなどが定義されている。)

GET

GETは指定したリソースの表現を転送するようにリクエストするメソッド。
(つまり、何か情報を検索したり取得するために使うためのメソッド。)
例えば、ブラウザでURLを入力し検索するとき、無意識にGETメソッドを使っている。

GETメソッドを使ってデータを送信する場合は、URLの後ろに送りたいデータを付与して送れる。
(データを取得したい時に使用、データベースの書き換えが必要ない場合。)

POST

POSTは指定したリソースを実装した機能に従って処理をする機能
GETとは反対に冪等でないかつ安全でないと定義されている。

POSTメソッドを利用してデータを送信する場合は、HTTPリクエスト内のメッセージボディにデータを含めて送る。
リクエストとして送信されるデータはメッセージボディ部に含まれる。
(メッセージボディは、HTTPリクエストのパラメータ内容を渡す場所)

以下のようなデータを変更したい時に使用。

  • HTMLのformタグに入力された内容をDBへ登録する
  • ブログの記事を投稿する
  • 新しいユーザを登録する
  • 既存のデータに新しい情報を付加する

リクエストパラメーターの付加の方法

GETはURLにクエリとして追加することが可能
上記で説明したとうり、GETメソッドを使ってデータを送信する場合は、URLの後ろに送りたいデータを付与して送れる。
(データを取得したい時、データベースの書き換えが必要ない場合。)

【例】
GET: /foo/bar?itemId=xxxx-xxxx
「URL?パラメータ名=値」という形式
「?」パラメータのはじまり
「&」パラメータの切れ目
「=」挟んだ左側がGETの変数名、右側が渡される値

一方、POSTはBodyをリクエストに含めることも可能。
また一般的にあまり使われないが、クエリを追加することもできる。
POST: /foo/bar?user="taro"
param:{"itemId": "xxxx-xxxx”}

まとめ

  • GETはリソースを取得するときに使うもの
  • GETは情報を取得するときに使うもの
  • POSTはリソースに対して特有の処理をするときに使うもの
  • POSTは新しい情報の登録をするときに使うもの