リクエスト&レスポンスとは
クライアントからWebサーバにアクセスすることをHTTPリクエスト、サーバが、コンテンツやプログラム処理した結果を返すことをHTTPレスポンスといい、まとめて「リクエスト & レスポンス」ともいいます。
リクエスト&レスポンスのフロー
Webでのリクエスト&レスポンスは以下のフローになります。
- ブラウザのリンクやフォームからリクエスト
- Webサーバが受信
- Webサーバで HTMLを読み込み
- 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メソッドにGETとPOSTメソッドがあります。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) |
---|---|
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