【開発ナレッジ】ブラウザからリクエストが送られてレスポンスが返るまでのフロー2 - j-komatsu/myCheatSheet GitHub Wiki

ブラウザからリクエストが送られてレスポンスが返るまでのフロー

1. フローの概要

graph TD;
    A[リクエスト発行] --> B[DNSルックアップ]
    B --> C[TCP接続確立]
    C --> D[TLSハンドシェイク]
    D --> E[HTTPリクエスト送信]
    E --> F[サーバー処理]
    F --> G[レスポンス送信]
    G --> H[ブラウザ描画]

2. 各ステップの詳細説明

2.1 リクエストの発行

初学者向け

  • ユーザーがURLを入力したり、リンクをクリックすると、ブラウザが「このページを見たい!」とサーバーにリクエストを送る。

専門家向け

  • ブラウザは GETPOST などのHTTPメソッドを使い、サーバーにHTTPリクエストを送信する。
  • リクエストヘッダーには User-Agent, Accept, Cookie などの情報が含まれる。

2.2 DNSルックアップ

初学者向け

  • 「www.example.com」をインターネット上の住所(IPアドレス)に変換する。
  • 変換した住所は一時的に記憶され、次回のアクセス時には省略できる。

専門家向け

  • クライアントはローカルキャッシュ → ISPのDNSサーバー → ルートDNSサーバー の順に問い合わせる。
  • 例: www.example.com192.168.1.1
入力: www.example.com
出力: 192.168.1.1

2.3 TCP接続確立

初学者向け

  • パソコンとサーバーが「データ送れる?」と確認し合い、OKなら通信を開始する。

専門家向け

  • 3ウェイハンドシェイク(SYN → SYN-ACK → ACK)を行い、TCP接続を確立。
入力: SYN (クライアント → サーバー)
出力: SYN-ACK (サーバー → クライアント)
出力: ACK (クライアント → サーバー)

2.4 TLSハンドシェイク(HTTPSのみ)

初学者向け

  • サーバーと暗号の鍵を交換し、安全な通信を確立する。

専門家向け

  • TLS/SSL証明書を用いて鍵交換し、暗号化セッションを確立。
入力: クライアントHello (暗号化可能なアルゴリズム一覧)
出力: サーバーHello (選択された暗号化方式, 証明書)

2.5 HTTPリクエスト送信

初学者向け

  • 「このページをください!」とサーバーにお願いする。

専門家向け

  • HTTPメソッド(GET/POST)に応じたリクエストを送信。
  • クッキーや認証トークンを付与。
入力: GET /index.html HTTP/1.1
出力: (サーバー応答待ち)

2.6 サーバー処理

初学者向け

  • サーバーがリクエストを受け取り、データベースなどを使って必要な情報を用意する。

専門家向け

  • Webサーバー(Nginx/Apache)がリクエストを解析。
  • 必要に応じてバックエンド(Node.js, PHP)に転送。
  • データベースにアクセスし、レスポンスを作成。
入力: GET /index.html HTTP/1.1
出力: HTMLレスポンス

2.7 レスポンス送信

初学者向け

  • 「リクエストありがとう!このページの情報だよ!」と返す。

専門家向け

  • HTTPレスポンスとして、ステータスコード・ヘッダー・ボディを送信。
入力: HTTP/1.1 200 OK
出力: HTMLデータ

2.8 画面の描画

初学者向け

  • ブラウザが受け取ったデータを使って、画面にページを表示する。

専門家向け

  • DOM解析 → CSS適用 → JavaScript実行 の順に処理。
  • 必要に応じて追加のリクエストを送信(画像・CSS・JSなど)。
入力: HTML + CSS + JS
出力: 画面描画

3. まとめ

ステップ 初学者向け説明 専門家向け説明
1. リクエスト発行 URL入力でページをリクエスト HTTPメソッドを使用しリクエスト送信
2. DNSルックアップ URLをIPアドレスに変換 DNSサーバーを順に問い合わせ
3. TCP接続確立 「データ送れる?」と確認 3ウェイハンドシェイク (SYN, ACK)
4. TLSハンドシェイク 暗号化の鍵を交換 SSL/TLS証明書を使用した鍵交換
5. HTTPリクエスト送信 「ページをください!」と要求 ヘッダー・クッキーを含めたリクエスト送信
6. サーバー処理 データベースから情報取得 Webサーバーとアプリケーションサーバー処理
7. レスポンス送信 「ページの情報をどうぞ!」と返す ステータスコード・HTMLレスポンスを送信
8. 画面描画 受け取ったデータを画面に表示 DOM解析 → CSS適用 → JS実行

このマークダウンファイルは .md ファイルとして保存し、そのまま使用可能です。