Skip to content
This repository has been archived by the owner on Apr 25, 2023. It is now read-only.

Latest commit

 

History

History
76 lines (67 loc) · 5.94 KB

デモシナリオ.md

File metadata and controls

76 lines (67 loc) · 5.94 KB

DEMO1 セマンティクスの維持を確認する

HTTP/1.1のセマンティクス

最初にh1のセマンティクスを確認します。

  1. wiresharkを開きます
  2. Chrome(ゲストユーザ)で開き、「https://http2-lab:8443/hello_world.php」にアクセスしてください。
  3. wiresharkを確認し、フィルター「http」をセットし見やすくしておくのをお勧めします。
  4. 次の点について確認を行ってください。
    • メソッドの確認: GET /hello_world.php であることを確認
    • ステータスコードの確認: 200 OK を確認
    • HTTPリクエストヘッダの確認: User-Agentなどを確認してみる。
    • レスポンスボディの確認: 空行(\r\n)でヘッダとボディが別れている事を確認

HTTP/2のセマンティクス

次にh2のセマンティクスを確認します。 この時、WiresharkやChromeを再起動したりリセットする必要はありません。 Wiresharkはキャプチャリセットしてしまうと、Forward Secrecyの性質で復号できなくなるので注意してください。

  1. Chromeで「https://http2-lab:443/hello_world.php」にアクセスしてください。
  2. wiresharkを確認し、フィルター「http2」をセットし見やすくしておくのをお勧めします。
  3. 次の点について確認を行ってください。
    • メソッドの確認: h1と同じく GET /hello_world.phpであることを確認
    • ステータスコードの確認 h1と同じく 200 OKであることを確認
    • HTTPリクエストヘッダの確認: h1と基本的には同じ。User-Agentなどを確認してみる。
    • レスポンスボディの確認: 空行ではなくHEADERSフレームとDATAフレームで分かれているが、ボディの内容は変わりないことを確認。

DEMOE2-1

Streamの中身をみる

DEMO1でキャプチャしたHTTP/2通信を利用します。再度取得する必要はありません。 HEADERSフレームで確認する箇所は次の通りです。

  • Flags: 表示部分を展開し、ビット毎の意味を確認してみてください。
  • Stream Identifer: Flagsの下にある行のStreamIDを確認してくださ。また、クライアントからサーバへの通信のため、ID値は奇数であることも確認してみてください。なおパケット一覧にあるID値はwiresharkによるパース結果のため、見るべきはパケット詳細に記載されているStream Identiferです。
  • Header Block Flagment: 16進の羅列があることを確認。その直下にHeader内容が記載されていますが、これはwiresharkがHeader Block Flagmentをパースした内容。

DATAフレームも同様にFlags,Stream ID,Dataを確認してください。

DEMO2-2

HTTP/1.11のコネクションとHTTP/2のstreamを見比べる。

はじめに、HTTP/1.1のコネクションを確認します。

  1. Chromeで「https://http2-lab:8443/」にアクセス。デモサイトのナビメニュー「HTTP/1.1」クリックでもHTTP/1.1アクセスできます。
  2. Chrome Dev Toolsを開き、Performanceタブに移動。
  3. record button(●印のボタン)をクリックし、待機させておく。
  4. 「画像(8分割)を読み込む」をクリックし、二郎(ラーメンの画像)を表示させる。
  5. Chrome Dev Toolsの録画を停止させる。
  6. Performance画面内のNetworkを、通信が行われているタイムラインの範囲までズームさせる。スクロールでズームできます。
  7. 最大コネクションが6本。1本目が終わった直後に7本目のリクエストが送られている事を確認する。

次にh2のコネクションを確認してください。

  1. Chromeで「https://http2-lab:443/」にアクセス。デモサイトのナビメニュー「HTTP/2」クリックでもHTTP/2アクセスできます。
  2. Performance画面はClearし、録画状態にさせる。
  3. 「画像(256分割)を読み込む」をクリックし、二郎(ラーメンの画像)を表示させる。
  4. Chrome Dev Toolsの録画を停止させる。
  5. 同時リクエスト数がh1に比べて大量に張られている事を確認する。

Extra DEMO 3 Server Push

サーバプッシュ時の通信を確認します。

  1. Chromeで「https://http2-lab:443/」にアクセス。デモサイトのナビメニュー「HTTP/2」クリックでもHTTP/2アクセスできます。
  2. 「サーバープッシュ」をクリックする。
  3. wiresharkを確認し、フィルター「http2」をセットし見やすくする。
  4. GET /server_push.phpのStreamIDに応答するレスポンスを探して、パケット詳細を確認する。
  5. 次のフレームがレスポンスに含まれている事を確認する。 ⋆ STREAM ID 1 Request HEADERSフレームに対するReponse HEADERSフレーム(200 OK)
    • PUSH_PROMISEフレーム3つ(test1.png,test2.png,test3.png)
    • PUSH_PROMISEフレーム(プッシュリクエスト)に対するHEADERSフレーム(プッシュレスポンス, 200 OK, Stream ID 2)
  6. 後続のPRIORITYフレームやDATAフレームのIDが2,4,6であることを確認する。

Extra DEMO 4 ALPN

ALPNの中身を確認します。

  1. wiresharkで適当なhttp2通信を右クリックし、[追跡]→[SSLストリーム]をクリックする。
  2. ポップアップしたウィンドウは不要なので閉じておく。
  3. Client Helloのパケットを探し、パケット詳細を確認する。
  4. Extension: application_layer_protocol_negotiationの行を探し、展開する。
  5. ALPN Next Protocolの順番が h2 http/1.1になっていることを確認
  6. Server Helloのパケットを探し、パケット詳細を確認する。
  7. Extension: application_layer_protocol_negotiationの行を探し、展開する。
  8. ALPN Next Protocolがh2になっていることを確認