17
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

HTTPリクエストの基本 GETとPOSTの違いを学ぶ

Posted at

この記事を書く目的

これまでに、以下の内容を学習してきました。

  • プロトコルとは
  • TCP/IPモデルの概念
  • クライアントサーバーモデル
  • URL

今回は、URLのスキームでもよく目にする身近なプロトコル「HTTP」を勉強します。
まずは基本となるGETとPOSTの違いを押さえたいです。

この記事の内容

  1. HTTPが担う役割
  2. GETメソッドとPOSTメソッドの違い
  3. 各メソッドの違いを理解する意義

HTTPとは

ネットワーク通信のためのプロトコルの1つです。
HyperText Transfer Protocolの文字をとってHTTPです。

TCP/IPモデルでは、アプリケーション層に位置します。
アプリケーション層プロトコルの役割は、通信サービスの実現です。

HTTPはWWWサービスの実現に不可欠なプロトコルで、クライアントとサーバー間でリソースの送受信を行うために用いられます。

初期のWebはシンプルなHTMLファイルのやり取りから始まりましたが、現代のWebが扱うリソースの種類は多岐に渡ります。

Webの発展に伴う大容量のデータや多様なコンテンツに対応するため、HTTPの改良が進み、バージョンは複数あります。

HTTPのステートレスという性質はクッキーやセッションと関連があります。

リクエストメソッドとは

クライアントのサーバーに対する要求には種類があります。
この要求の種類のことをリクエストメソッドと呼び、目的に合わせて適宜使い分けます。

  • GET
  • POST
  • DELETE
  • PUT
  • PATCH

などがあります。

今回は基本となるGETとPOSTを学びます。

DELETE,PUT,PATCHなど他のメソッドは、今後RESTful APIを学習するときに必要となる知識のようです。まずは存在を認知し、おおまかな役割だけでも押さえておこうと思います。

GETメソッドとPOSTメソッドを整理してみる

GET POST
目的 サーバーからのリソースの取得(読み取り専用) サーバーのリソースへデータを送信
リクエスト内容の格納場所 URL メッセージのボディ
冪等性 冪等である 冪等ではない
具体的な利用シーン Webページの閲覧、URLによる他者とのリソースのシェア 新規ユーザー登録のフォームデータの送信
ブックマーク 不可

GETメソッドの特徴

GETメソッドは、サーバーからのリソースの取得に使います。

「リソースの取得」という表現はあまり馴染みがないですが、私たちは頻繁にGETリクエストを使って、サーバーに対してリソースの取得を要求しています。

具体例

具体例は、以下の通りです。

  • Webサイトで何かをクリックするとき
  • 知人から「このサイト見て」とLINEが届き、スマホからURLリンクをタップするとき

これらは、GETメソッドでサーバーに対してリクエストしていることになります。

GETメソッドのやり取りを会話に例える

ブラウザ:「このURLのWebページを見せてください!」(GET /index.html)

サーバー:「はい、どうぞ!」(200 OK + コンテンツ)

200 OKは、リクエストが成功したことを示すレスポンスステータスコードです。
レスポンスステータスコードとは、3桁の数字で表現されるサーバーからの応答です。

POSTメソッドの特徴

頻繁に対比されるPOSTメソッドです。こちらもメソッドなので、「サーバーに対して要求をする」という点はGETと共通ですが、

POSTメソッドは、指定サーバーのリソースへのデータ送信に使われます。新しいリソースの作成処理の実行のためのメソッドです。

具体例

具体例は、以下の通りです。

  • 使いたいサービスは会員登録が必要だったので、新規会員登録のためにidとpasswordをフォームに入力し、登録ボタンを押した
  • お問い合わせフォームに質問内容を記入し、送信ボタンを押した

POSTメソッドのやり取りを会話に例える

ブラウザ:「idにhoge@gmail.com を、passwordに1234の情報を送信するので、このデータを元に処理をお願いします!」(POST /signup)

サーバー:「承知しました。新しいユーザーを作成しました!」(201 Created)

201 Createdは、リクエストが成功し、新しいリソースが作成されたことを示すステータスコードです。

なぜGETとPOSTの違いを理解する必要があるのか

「GETとPOSTの違いは、Webサービス開発の基本です」とよく目にしますが、なぜこの2つの違いを学ぶことが重要なのでしょうか。

それは、「リクエスト内容の格納場所が、セキュリティに影響するから」です。

POSTでリクエストを送るべき場面でもGETで送ることができてしまうので、注意が必要です。

GETリクエスト内容の格納場所は

  • GETの場合、URL内に含む
  • POSTの場合、メッセージのボディに含む

です。

サインアップを例に

新しいサービスを利用する際の会員登録を例に考えます。

このようなケースではPOSTメソッドが使われるべきです。なぜなら、もしGETメソッドで会員登録のフォームデータを送った場合、idとpasswordのような個人情報がURLのパラメーターに記載されることになります。

/signup?id=hoge%40gmail.com&password=1234

このマズさは、URLの本質を押さえることで理解できました。

URLとは、世界中の人と情報を繋げるための技術です。URLにリクエストの内容を含むということは、他者に容易に情報を共有できてしまうということです。シェアするつもりがなくても、ブラウザの履歴やログとして残る可能性があります。

大事な情報はURLに含めるべきでないことがわかります。

大事な情報はボディに入れる

POSTメソッドであれば、メッセージのボディに格納することができます。

メッセージはヘッダとボディに分けられます。ボディとは、HTTPリクエストの中でデータを運ぶ部分のことで、URLには表示されない場所です。

ボディに格納するからと言って、POSTを選択すれば万事OKとは言えないそうです。この辺りはHTTPSなどセキュアな通信の勉強が必要なので、今後の課題とします。

URLはURLでとても便利なものなので、適宜メソッドを使い分ける必要があることがわかりました。

学んだことまとめ

  • HTTPは、TCP/IPモデルのアプリケーション層のプロトコルで、ネットワーク上にある多様なリソースの送受信のために必要な技術
  • GETのリクエスト内容はURLに含まれるので、目的に合わせてメソッドを選択する必要がある

今回扱わなかった他のメソッドはRESTfulAPIへ、冪等性への理解はサーバーレスなどに続いていくようです。

一歩ずつ進んでいきます。

参考資料

マスタリングTCP/IP
TCP/IPの絵本

17
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?