5. リクエスト&レスポンス

リクエスト&レスポンスとは

クライアントからWebサーバにアクセスすることをHTTPリクエスト、サーバが、コンテンツやプログラム処理した結果を返すことをHTTPレスポンスといい、まとめて「リクエスト & レスポンス」ともいいます。

リクエスト&レスポンスのフロー

Webでのリクエスト&レスポンスは以下のフローになります。

  1. ブラウザのリンクやフォームからリクエスト
  2. Webサーバが受信
  3. Webサーバで HTMLを読み込み
  4. Webサーバからブラウザに結果を返す(レスポンス)

HTTPプロトコル

これらはHTTPプロトコルという規格で決まっており、HTTP通信は「リクエスト行」「ヘッダフィールド」「ボディ」で構成されています。 「リクエスト」「レスポンス」は Webデータ通信でよくでてくる用語ですので覚えておきましょう。

RESTやCRUD

例えば、HTMLから Webサーバとの通信は以下のようなのフローになります。

HTTP メソッド

HTTPプロトコルでは Webサーバへのリクエストを「HTTPメソッド」で定義しています。 HTTPメソッドは、REST や CRUD といったインターフェイス機能でよく説明されます。

ヘッダフィールドの例

例えばターミナルで「curl」というコマンドを使うと、HTTP通信を可視化できます。以下は、ヘッダーフィールドの取得の例です。

% curl -I https://www.google.com
HTTP/2 200
content-type: text/html; charset=ISO-8859-1
p3p: CP="This is not a P3P policy! See g.co/p3phelp for more info."
date: Tue, 14 Jul 2020 02:58:06 GMT
server: gws
...

GETとPOST

Web アプリ開発で最も利用される HTTPメソッドにGETPOSTメソッドがあります。HTTP メソッドは以下のように定義されています。

HTTPメソッド一覧

HTTPメソッド 処理
GET リソースの取得
POST リソースへのデータ追加など
PUT リソースの更新・作成
DELETE リソースの削除
HEAD リソースのヘッダの取得
PATCH リソースの部分置換
OPTIONS リソースがサポートしているメソッドの取得
TRACE そのまま結果を取得
CONNECT サーバーとの間にトンネルを確立

GETメソッド

GETメソッドはURLにパラメータを追加したリクエストで、以下のルールでWebサーバに送信します。

  • URLの末尾に「 ? 」をつける
  • パラメータは キー=値 で構成
  • 複数のパラメータは「 & 」でつなぐ
GET リクエストの URL
http://localhost/lesson5/message.php?email=abc%40example.com&password=abc&is_active=1

URLの「 ? 」以降がGETリクエストのパラメータでクエリストリングともいいます。パラメータをまとめると以下のようになります。

キー(key) 値(value)
email abc%40example.com
password abc
is_active 1

特殊文字はエスケープ

URL パラメータに「%40」という文字が含まれています。 この文字は「@」を表しますが HTTP 通信するときは「%40」に変換する必要があります。

このような特殊文字を URL 用に文字変換することを「URL エンコード」または「エスケープ」といいます。

GET リクエストの利用法

GET リクエストは主にサーバからデータ取得・表示するときに利用します。

  • ページの切り替え
  • データの検索
  • API からデータを取得

パラメータを変更することで、必要なデータやページを取得することができます。

GET リクエストの注意

GET リクエストは URL にパラメータを直接記述するため以下のことに注意しなければいけません。特にGETでプライバシーのあるデータを送信しないよう気をつけましょう。

  • 重要なデータは GETリクエストしない(パスワード、クレジットカードなど)
  • データ作成 / 更新 / 削除するような処理は GETリクエストしない
  • 大量のデータは送信しない

フォームのGET送信

HTMLではHTMLフォームという機能がありますが、フォームでGETリクエストする例です。

<h2>GET</h2>
<form action="" method="get">
  <input type="text" name="email" value="">
  <input type="password" name="password" value="">
  <input type="checkbox" name="is_active" value="1"> 有効
  <button>送信</button>
</form>

GET リクエストを確認

GETリクエストでフォームを実行した結果です。ブラウザの URL にパラメータが追加されているのが確認できます。

../message.php?email=abc%40example.com&is_active=1

POST メソッド

POSTはURLにパラメータをつけずにリクエストします。Webブラウザから更新データ送信をするのに利用します。

POST リクエストの利用法

POST リクエストは、サーバのデータ更新・アップロードなどで利用します。

  • データ更新・削除するような処理
  • 重要なデータを送信
  • 大量のデータやバイナリデータ送信

HTMLフォームのPOST送信

HTMLフォームでPOSTリクエストする例です。

<h2>POST</h2>
<form action="" method="post">
  <input type="text" name="email" value="">
  <input type="password" name="password" value="">
  <input type="checkbox" name="is_active" value="1"> 有効
  <button>POST送信</button>
</form>
キー(key) 値(value) メモ
action サーバのリクエストURL URLは相対パス・絶対パスのどちらかを指定
method get/post メソッド名

POSTリクエストのURLを確認

フォームでPOSTリクエストすると、パラメーターなしのURLです。パラメーターはHTTP通信内部でWebサーバに送信されます。

../

POSTとGETの違いを覚える

GETとPOSTのようにHTTPメソッドによってデータ処理が違います。パスワードやクレジットカードのような機密データを含む場合は、POSTリクエストするのが最適です。

演習

問題1

ブラウザからWebサーバに要求することを何といいますか?

1)HTTPリクエスト

2)HTTPレスポンス

3)HTTPプロトコル

4)HTTPヘッダー

問題2

Webサーバにパラメーター付きのURLでデータ送信するHTTPメソッドを何といいますか?

https://www.example.com/search?q=html

1)GET

2)POST

3)HTTP

4)HTTPS

問題3

Webサーバに機密情報のデータ送信するのに最適なHTTPメソッドを何といいますか?

https://www.example.com/search

1)GET

2)POST

3)HTTP

4)HTTPS