最初にh1のセマンティクスを確認します。
- wiresharkを開きます
- Chrome(ゲストユーザ)で開き、「https://http2-lab:8443/hello_world.php」にアクセスしてください。
- wiresharkを確認し、フィルター「http」をセットし見やすくしておくのをお勧めします。
- 次の点について確認を行ってください。
- メソッドの確認: GET /hello_world.php であることを確認
- ステータスコードの確認: 200 OK を確認
- HTTPリクエストヘッダの確認: User-Agentなどを確認してみる。
- レスポンスボディの確認: 空行(\r\n)でヘッダとボディが別れている事を確認
次にh2のセマンティクスを確認します。 この時、WiresharkやChromeを再起動したりリセットする必要はありません。 Wiresharkはキャプチャリセットしてしまうと、Forward Secrecyの性質で復号できなくなるので注意してください。
- Chromeで「https://http2-lab:443/hello_world.php」にアクセスしてください。
- wiresharkを確認し、フィルター「http2」をセットし見やすくしておくのをお勧めします。
- 次の点について確認を行ってください。
- メソッドの確認: h1と同じく GET /hello_world.phpであることを確認
- ステータスコードの確認 h1と同じく 200 OKであることを確認
- HTTPリクエストヘッダの確認: h1と基本的には同じ。User-Agentなどを確認してみる。
- レスポンスボディの確認: 空行ではなくHEADERSフレームとDATAフレームで分かれているが、ボディの内容は変わりないことを確認。
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を確認してください。
はじめに、HTTP/1.1のコネクションを確認します。
- Chromeで「https://http2-lab:8443/」にアクセス。デモサイトのナビメニュー「HTTP/1.1」クリックでもHTTP/1.1アクセスできます。
- Chrome Dev Toolsを開き、Performanceタブに移動。
- record button(●印のボタン)をクリックし、待機させておく。
- 「画像(8分割)を読み込む」をクリックし、二郎(ラーメンの画像)を表示させる。
- Chrome Dev Toolsの録画を停止させる。
- Performance画面内のNetworkを、通信が行われているタイムラインの範囲までズームさせる。スクロールでズームできます。
- 最大コネクションが6本。1本目が終わった直後に7本目のリクエストが送られている事を確認する。
次にh2のコネクションを確認してください。
- Chromeで「https://http2-lab:443/」にアクセス。デモサイトのナビメニュー「HTTP/2」クリックでもHTTP/2アクセスできます。
- Performance画面はClearし、録画状態にさせる。
- 「画像(256分割)を読み込む」をクリックし、二郎(ラーメンの画像)を表示させる。
- Chrome Dev Toolsの録画を停止させる。
- 同時リクエスト数がh1に比べて大量に張られている事を確認する。
サーバプッシュ時の通信を確認します。
- Chromeで「https://http2-lab:443/」にアクセス。デモサイトのナビメニュー「HTTP/2」クリックでもHTTP/2アクセスできます。
- 「サーバープッシュ」をクリックする。
- wiresharkを確認し、フィルター「http2」をセットし見やすくする。
- GET /server_push.phpのStreamIDに応答するレスポンスを探して、パケット詳細を確認する。
- 次のフレームがレスポンスに含まれている事を確認する。
⋆ 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)
- 後続のPRIORITYフレームやDATAフレームのIDが2,4,6であることを確認する。
ALPNの中身を確認します。
- wiresharkで適当なhttp2通信を右クリックし、[追跡]→[SSLストリーム]をクリックする。
- ポップアップしたウィンドウは不要なので閉じておく。
- Client Helloのパケットを探し、パケット詳細を確認する。
- Extension: application_layer_protocol_negotiationの行を探し、展開する。
- ALPN Next Protocolの順番が h2 http/1.1になっていることを確認
- Server Helloのパケットを探し、パケット詳細を確認する。
- Extension: application_layer_protocol_negotiationの行を探し、展開する。
- ALPN Next Protocolがh2になっていることを確認