メインコンテンツへスキップ
見出し画像

HTTPとは?リクエストの中身とWeb通信の流れを初心者向けに解説

    Webサイトを開くとき、ブラウザの裏側では何が行われているのでしょうか。
    URLを入力してからサーバへ要求が届くまでを追いながら、HTTPリクエストの中身を整理します。

    最初に結論

    HTTPは、クライアントとサーバがWeb上の情報をやり取りするための決まりです。

    基本の流れは、次の二つで成り立ちます。

    1. クライアントがHTTPリクエストを送る

    2. サーバがHTTPレスポンスを返す

    この記事では、前半に当たるHTTPリクエストを扱います。リクエストには「何を」「どのような方法で」処理してほしいのかと、そのための補足情報が入ります。

    クライアントとサーバとは

    HTTPでは、要求を送るブラウザやアプリを「クライアント」、要求を受けてWebページやデータを返す側を「サーバ」と呼びます。

    URLを入力してからリクエストを送るまで

    ブラウザで次のURLを開く場合を考えます。

    http://shop.example.com/products?id=10

    HTTP/1.1を使う場合、大まかには次のように進みます。

    1. ブラウザがURLを読み取る

    2. DNSでshop.example.comのIPアドレスを調べる

    3. ブラウザがサーバとのTCP接続を確立する

    4. ブラウザがHTTPリクエストを送る

    5. サーバが要求を読み取り、必要な処理を行う

    6. サーバが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=abc123

    HTTP/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レスポンスとは?ステータスコード・ヘッダー・本文を初心者向けに解説

    ※公開後にリンクを追加します。

    参考資料

     
     
    情報処理試験、セキュリティ・Webアプリ開発を学ぶ現役SE。初心者目線で、つまずいたIT用語や仕組みを整理しています。心理・セルフケア、本から学んだことも発信。Amazonのアソシエイトとして、Yotsuhaは適格販売により収入を得ています。

    あなたへのおすすめ