HTTPリクエストのライフサイクル
1. クライアントがリクエストを送信
- HTTPリクエストの生成: クライアント(通常はWebブラウザ)がHTTPリクエストを生成する。
- HTTPメソッド: GET、POST など。
- 要求されたリソース: たとえば
/index.html。
- プロトコルバージョン: HTTP/1.1 など。
- ヘッダーと本文:
key: value 形式のヘッダーと、任意のメッセージ本文を含む。
2. DNSルックアップ
- ドメイン名の変換: 人が読めるドメイン名(
www.example.com)をIPアドレス(93.184.216.34)に変換する。
- DNSサーバーへのクエリ: クライアントがDNSサーバーにクエリを送り、ドメイン名をIPアドレスに変換する。
3. TCPハンドシェイク
- TCP接続の確立: クライアントがサーバーとのTCP接続を確立する。
- 3ウェイハンドシェイク:
- SYN: クライアントが接続要求を送る。
- SYN-ACK: サーバーが要求を確認する。
- ACK: クライアントが確認応答を送る。
4. HTTPリクエストの送信
- HTTPリクエストの送信: TCP接続が確立されると、クライアントが実際のHTTPリクエストを送る。
5. インターネット経由のパケットルーティング
- パケット転送: データパケットが複数のネットワーク機器を経由してサーバーへルーティングされる。
- ルーターの役割: ルーターがパケットの最適な経路を決定する。
6. サーバーの応答
- HTTPレスポンスの生成: サーバーがHTTPリクエストを処理し、レスポンスを生成する。
- レスポンスの内容:
- プロトコル: 使用されたHTTPバージョン。
- 状態情報: HTTPステータスコード(例: 200、404)。
- レスポンスヘッダー: リクエストヘッダーに類似。
- レスポンス本文: 要求されたコンテンツ(例: HTMLページ、JSONデータ)。
7. コンテンツのレンダリング
- HTTPレスポンスの処理: クライアントがHTTPレスポンスを受け取って処理する。
- ブラウザのレンダリング: ブラウザがHTMLを解釈し、画面にコンテンツをレンダリングする。
- 追加リソースの要求: 画像、CSS、JavaScript などの追加リソースを要求する。
HTTPS = HTTP + 暗号化
TLSハンドシェイク
- TLSハンドシェイク: クライアントとサーバーが暗号化および認証用の鍵を交換する。
- 暗号化通信: TLSハンドシェイク後、クライアントとサーバーはHTTPを使って暗号化されたメッセージをやり取りする。
TLS 1.3ハンドシェイク
- 簡素化されたプロセス: TLS 1.3はより少ないオプションを提供し、よりシンプルで安全かつ高速である。
- 主要なステップ:
- クライアントハロー: クライアントがサポートする暗号スイートとTLSバージョンをサーバーに送る。
- サーバーハロー: サーバーが選択した暗号スイートとTLSバージョンをクライアントに送る。
- 証明書の検証: クライアントがサーバーのSSL証明書を検証する。
- プレマスターシークレットの生成: クライアントがプレマスターシークレットを生成し、サーバーに送る。
- セッションキーの生成: クライアントとサーバーがセッションキーを生成する。
- セキュア通信: セッションキーを使い、安全な対称暗号化によって通信する。
GN⁺の意見
- インターネット通信の理解: HTTPとHTTPSの基本概念を理解すれば、ネットワーク通信の基礎をしっかり固められる。
- セキュリティの重要性: HTTPSによってデータ転送の安全性を高めることが重要である。
- TLS 1.3の利点: よりシンプルで高速かつ安全なTLS 1.3の利用が推奨される。
- 実務への適用: 実際のプロジェクトでHTTPSを適用し、セキュリティを強化する必要がある。
- 追加学習: ネットワーク層とプロトコルについてさらに学ぶことで、より深い理解を得られる。
1件のコメント
Hacker Newsのコメント