
HTTPとは?リクエストの中身とWeb通信の流れを初心者向けに解説
Webサイトを開くとき、ブラウザの裏側では何が行われているのでしょうか。
URLを入力してからサーバへ要求が届くまでを追いながら、HTTPリクエストの中身を整理します。
最初に結論
HTTPは、クライアントとサーバがWeb上の情報をやり取りするための決まりです。
基本の流れは、次の二つで成り立ちます。
クライアントがHTTPリクエストを送る
サーバがHTTPレスポンスを返す
この記事では、前半に当たるHTTPリクエストを扱います。リクエストには「何を」「どのような方法で」処理してほしいのかと、そのための補足情報が入ります。
クライアントとサーバとは
HTTPでは、要求を送るブラウザやアプリを「クライアント」、要求を受けてWebページやデータを返す側を「サーバ」と呼びます。
URLを入力してからリクエストを送るまで
ブラウザで次のURLを開く場合を考えます。
http://shop.example.com/products?id=10
HTTP/1.1を使う場合、大まかには次のように進みます。
ブラウザがURLを読み取る
DNSでshop.example.comのIPアドレスを調べる
ブラウザがサーバとのTCP接続を確立する
ブラウザがHTTPリクエストを送る
サーバが要求を読み取り、必要な処理を行う
サーバがHTTPレスポンスを返す
このURLでは、httpが通信方式、shop.example.comが接続先、/productsが要求する場所、id=10が追加条件です。ブラウザはこれらを読み取り、接続先と取得したい対象をサーバへ伝えます。

HTTPリクエストの中身
商品ページを取得するリクエストの例を見てみましょう。
GET /products?id=10 HTTP/1.1
Host: shop.example.com
Accept: text/html
Accept-Language: ja
User-Agent: ExampleBrowser/1.0
Cookie: session_id=abc123HTTP/1.1のリクエストは、主に「リクエスト行」「ヘッダー」「必要に応じて本文」の三つで構成されます。
リクエスト行は「何をしてほしいか」を表す
一行目を分解してみます。
GET /products?id=10 HTTP/1.1
GET:メソッド
/products?id=10:要求先
HTTP/1.1:HTTPのバージョン
メソッドは、サーバにしてほしい処理を表します。
GET:情報を取得する
POST:データを送り、処理を依頼する
PUT:指定した内容で置き換える
DELETE:対象を削除する
同じURLでも、メソッドが違えばサーバに求める処理も変わります。
ヘッダーは要求の補足情報
二行目以降のヘッダーには、リクエストを処理するための補足情報が入ります。
Host:接続したいホスト名
Accept:受け取りたいデータ形式
Accept-Language:希望する言語
User-Agent:ブラウザなどの情報
Cookie:以前サーバから受け取ったCookie
Authorization:認証情報を送る場合に使う
ヘッダーは名前: 値という形で記述されます。

本文には送信したいデータが入る
ヘッダーの後に空行を置き、必要であれば本文を続けます。GETでは本文を付けないことが一般的です。
例えば、商品をカートへ追加するPOSTリクエストは次のようになります。
POST /cart HTTP/1.1
Host: shop.example.com
Content-Type: application/json
Content-Length: 29
Cookie: session_id=abc123
{"productId":10,"quantity":1}Content-Typeは本文の形式、Content-Lengthは本文の大きさを表します。この例では、JSON形式の本文に商品番号と数量が入っています。
一つの画面でもリクエストは複数回送られる
商品ページのHTMLを受け取った後、ブラウザはHTMLの中を確認します。そこに画像、CSS、JavaScriptが指定されていれば、それぞれを取得するためのHTTPリクエストを追加で送ります。
つまり、Webページ一つにつき通信が一往復だけ行われるとは限りません。複数のリクエストとレスポンスが重なって、一つの画面が作られます。

POSTなら送信内容を隠せるわけではない
POSTは、データを本文に入れて送るためによく使われます。しかし、POST自体に暗号化する機能はありません。
通常のHTTPで送れば、本文に入れた情報も通信経路上で読み取られる可能性があります。ログイン情報や個人情報を送る場合は、TLSでHTTP通信を保護するHTTPSが必要です。

まとめ
HTTPはクライアントが要求を送り、サーバが応答を返すための決まり
リクエスト行にはメソッド、要求先、HTTPバージョンが入る
ヘッダーには要求を処理するための補足情報が入る
本文にはJSONなどの送信データを入れられる
POSTは暗号化ではなく、通信の保護にはHTTPSが必要
次の記事では、サーバが返すHTTPレスポンスの中身を、ステータスコード、ヘッダー、本文に分けて確認します。
あわせて読みたい関連記事
続きの記事:
HTTPレスポンスとは?ステータスコード・ヘッダー・本文を初心者向けに解説
※公開後にリンクを追加します。