2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

curlコマンドの-w (--write-out)オプションで各ステップの所要時間を出力してhttpとhttpsの差を確認してみる

Posted at

確認スクリプト

while ループで、現在の時刻を表示しながら、2秒インターバルで curl コマンドを実行するスクリプトを作成しました

while true; do
    echo -n '['`date '+%Y/%m/%d %T'`'] '
    curl -s -o /dev/null -w "\
%{time_namelookup} \
%{time_connect} \
%{time_appconnect} \
%{time_pretransfer} \
%{time_starttransfer} \
%{time_total} \
%{remote_ip}\n" https://example.com/
    sleep 2
done

使用している curl のオプションは以下のとおりです

  • -s: curl の進捗情報やエラーを表示しない
  • -o /dev/null: レスポンスの内容を表示しない
  • -w: curl の出力形式を指定(詳細は以下)

-w オプションの引数です。単位はすべて秒で、コマンドの実行開始からの経過時間を出力します

  • %{time_namelookup}: DNS 名前解決が完了するまでにかかった時間
  • %{time_connect}: サーバーへの TCP 接続が完了するまでにかかった時間
  • %{time_appconnect}: サーバーへの TLS 接続が完了するまでにかかった時間
  • %{time_pretransfer}: リクエスト送信が開始されるまでにかかった時間
  • %{time_starttransfer}: レスポンスの最初のバイトを受信するまでにかかった時間
  • %{time_total}: レスポンスの受信が終わるまでにかかった時間
  • %{remote_ip}: 接続先の IP アドレス

なお、example.com は HTTPS ( https://example.com/ ) でも HTTP ( http://example.com/ ) でもアクセスできるようになっています。CDN に乗っているようです。

コマンドの実行結果: https 編

簡単に10秒間だけ実行してみます

[2023/05/09 18:45:41] 0.004255 0.122943 0.382825 0.382982 0.504497 0.504939 93.184.216.34
[2023/05/09 18:45:43] 0.008665 0.126337 0.389283 0.389374 0.515294 0.515694 93.184.216.34
[2023/05/09 18:45:46] 0.006952 0.160491 0.456443 0.456597 0.575058 0.575518 93.184.216.34
[2023/05/09 18:45:48] 0.009867 0.127739 0.388252 0.388389 0.507338 0.507515 93.184.216.34
[2023/05/09 18:45:51] 0.008886 0.133743 0.400165 0.400278 0.521013 0.521195 93.184.216.34

なお、HTTP/2 での接続になっていました

コマンドの実行結果: http 編

スクリプトのこちらの行を、https → http に変更して実行します

-%{remote_ip}\n" https://example.com/
+%{remote_ip}\n" http://example.com/

こちらも5回分だけ実行してみます

[2023/05/09 18:45:57] 0.009565 0.130113 0.000000 0.130274 0.252637 0.253150 93.184.216.34
[2023/05/09 18:45:59] 0.008010 0.125504 0.000000 0.125960 0.242670 0.243096 93.184.216.34
[2023/05/09 18:46:01] 0.008424 0.130206 0.000000 0.130604 0.252498 0.252901 93.184.216.34
[2023/05/09 18:46:04] 0.008872 0.127002 0.000000 0.127096 0.245600 0.246088 93.184.216.34
[2023/05/09 18:46:06] 0.007377 0.128108 0.000000 0.128185 0.249296 0.249794 93.184.216.34

http では TLS 接続のステップがないため、time_appconnect が省略されて0になっています

結果の比較

それぞれ5回分の平均値をとり、比較してみます。単位はミリ秒に直しています

namelookup connect appconnect pretransfer starttransfer total
(1) https 7.725 134.251 403.394 403.524 524.640 524.972
(2) http 8.450 128.187 - 128.424 248.540 249.006
(1) - (2) -0.725 6.064 - 275.100 276.100 275.966

誤差もあるはずですが、http の場合 TLS の処理 appconnect がない分、https よりも pretransfer まで200ミリ秒以上早く、total では2倍くらいの差が出ました

実際のブラウザによるアクセスなどのユースケースでは、

  • 今回の実験よりもレスポンスのサイズが大きいことが多いと考えられるため、レスポンスのダウンロードにかかる時間のほうが支配的になるはず
  • 複数のリクエストにまたがる場合にセッションが維持されることが多いと考えられるため、全体からすると connect, appconnect にかかる時間の割合は減っていくはず

など考えられますが、curl で簡易的な調査をする際には役立つことがあります

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?