【開発ナレッジ】ブラウザからリクエストが送られてレスポンスが返るまでのフロー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を入力したり、リンクをクリックすると、ブラウザが「このページを見たい!」とサーバーにリクエストを送る。
専門家向け
- ブラウザは
GET
やPOST
などのHTTPメソッドを使い、サーバーにHTTPリクエストを送信する。 - リクエストヘッダーには
User-Agent
,Accept
,Cookie
などの情報が含まれる。
2.2 DNSルックアップ
初学者向け
- 「www.example.com」をインターネット上の住所(IPアドレス)に変換する。
- 変換した住所は一時的に記憶され、次回のアクセス時には省略できる。
専門家向け
- クライアントはローカルキャッシュ → ISPのDNSサーバー → ルートDNSサーバー の順に問い合わせる。
- 例:
www.example.com
→192.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
ファイルとして保存し、そのまま使用可能です。