TT Lab
はじめる
学ぶ 学習パス コース

ネットワークトラブルシューティング

curlでHTTPを診断する

TT Labで続きを見る

目標

curlでステータスコード・ヘッダー・リダイレクト・仮想ホスト・タイミングを取り出し、「遅い」と「つながらない」を区間の名前に置き換える訓練をします。

なぜ重要なのか

curl -wのタイミングフィールドは、1つのリクエストを名前解決 / TCP接続 / TLS / 最初のバイト / 全体の5つの区間に分解します。この分解があれば、「APIが遅い」という報告を「TLSハンドシェイクが800msです」に置き換えることができ、その瞬間に担当チームと対処が決まります。--resolveと-H 'Host:'は、デプロイ前の検証に必須のツールです。DNSを変える前に新しいサーバーを実際の名前で試せますし、LBの裏のバックエンドを直接叩きながらも、仮想ホストのルーティングは元のとおりに通せます。

ステップ

  1. /root/httpディレクトリを作成し、/opt/fixtures/nt-http/server.pyを8088ポートでバックグラウンドで起動してください。採点の時点でも生きている必要があります。
  2. http://127.0.0.1:8088/okを詳細モードでリクエストし、リクエストとレスポンスのヘッダーを含む出力全体を/root/http/verbose.txtに保存してください。
  3. /ok、/notfound、/teapot、/redirectの4つのパスのステータスコードを、경로 코드の形式(プレースホルダーはパスとステータスコードです)で1行ずつ/root/http/status.txtに書いてください。リダイレクトは追いかけないでください。
  4. /okのレスポンスヘッダーだけを/root/http/headers.txtに保存してください。X-Labhub-Nodeヘッダーが含まれている必要があります。
  5. /chainをリダイレクトを追いかけながらリクエストし、最終的なステータスコードとリダイレクト回数を、code=<코드> redirects=<횟수>の1行(プレースホルダーはステータスコードとリダイレクト回数です)で/root/http/redirect.txtに書いてください。
  6. Host: shop.labhub.localヘッダーを付けて/whoamiをリクエストし、レスポンスの本文を/root/http/host.txtに保存してください。
  7. --resolveを使って、http://shop.labhub.local:8088/okを/etc/hostsに触れずに成功させ、そのレスポンスの本文を/root/http/resolve.txtに保存してください。
  8. /root/http/timing.txtを次の4行で作成してください。値は、/slowパスをリクエストして得た実際の測定値です。 code=<상태코드> / connect=<time_connect> / ttfb=<time_starttransfer> / total=<time_total>(プレースホルダーはステータスコードです) /slowには1.2秒の遅延があるため、totalは1以上である必要があります。

参考

診断サーバーの起動

/root/httpディレクトリを作成し、/opt/fixtures/nt-http/server.pyを8088ポートでバックグラウンドで起動してください。採点の時点でも生きている必要があります。

フィクスチャサーバーは、ポートを引数として受け取ります。起動したあと、ssでリッスンを確認してください。

リクエストとレスポンスのヘッダー全体を見る

http://127.0.0.1:8088/okを詳細モードでリクエストし、リクエストとレスポンスのヘッダーを含む出力全体を/root/http/verbose.txtに保存してください。

curlの詳細モードは、標準エラー出力に出ます。ファイルに残すには、リダイレクトを併用する必要があります。

パスごとのステータスコードの表

/ok、/notfound、/teapot、/redirectの4つのパスのステータスコードを、경로 코드の形式(プレースホルダーはパスとステータスコードです)で1行ずつ/root/http/status.txtに書いてください。リダイレクトは追いかけないでください。

出力フォーマット指定子で、ステータスコードだけを取り出せます。本文は捨て、コードだけを残してください。

レスポンスヘッダーだけを取り出す

/okのレスポンスヘッダーだけを/root/http/headers.txtに保存してください。X-Labhub-Nodeヘッダーが含まれている必要があります。

ヘッダーを標準出力にダンプするオプションと、本文を捨てるオプションを組み合わせると、GETを維持したままヘッダーだけを見られます。

リダイレクトを追いかける

/chainをリダイレクトを追いかけながらリクエストし、最終的なステータスコードとリダイレクト回数を、code=<코드> redirects=<횟수>の1行(プレースホルダーはステータスコードとリダイレクト回数です)で/root/http/redirect.txtに書いてください。

リダイレクトを追いかけるオプションと、何回追いかけたかを教えてくれる出力変数があります。

Hostヘッダーで仮想ホストを試す

Host: shop.labhub.localヘッダーを付けて/whoamiをリクエストし、レスポンスの本文を/root/http/host.txtに保存してください。

フィクスチャサーバーの/whoamiは、受け取ったHostヘッダーをそのまま返します。

DNSなしで名前で接続する

--resolveを使って、http://shop.labhub.local:8088/okを/etc/hostsに触れずに成功させ、そのレスポンスの本文を/root/http/resolve.txtに保存してください。

--resolveは、名前:ポート:アドレスの3つの値をコロンでつなげて書きます。/etc/hostsに触れなくてもできます。

タイミングの分解とレポート

/root/http/timing.txtを次の4行で作成してください。値は、/slowパスをリクエストして得た実際の測定値です。 code=<상태코드> / connect=<time_connect> / ttfb=<time_starttransfer> / total=<time_total>(プレースホルダーはステータスコードです) /slowには1.2秒の遅延があるため、totalは1以上である必要があります。

タイミングフィールドは累積値です。/slowパスは、わざと遅く応答します。