[小ネタ] curl コマンドでステータスコード 000 のときは -v を付けてみよう
アノテーション・テクニカルサポートチームの hato です。
curl コマンドでサービス監視をしていますが、まれにステータスコード「000」が記録されています。
サーバー側で「000」を返却する実装はしていないのですが、どこで生成されているかわかりますか。
と、お問い合わせをいただくことがあり少し調べてみました。
HTTP レスポンスステータスコード - HTTP | MDN
メモ: この一覧にないレスポンスを受け取った場合、それは標準外のレスポンスであり、おそらくそのサーバーソフトウェアに固有のものです。
結論
存在しないホストなど、レスポンスステータスコードがない場合に--write-out
オプションでステータスコードを取得すると curl の場合はステータスコード「000」が設定されるようです。
$ curl -sI -w '%{http_code}\n' -o /dev/null http://hato.example.com/ 000
試しに-v
を追加した場合は、Could not resolve host
のエラーが発生していることが確認できます。
ステータスコード「000」が記録されている場合は、ステータスコードが存在しない可能性を疑いましょう。
$ curl -sI -w '%{http_code}\n' -o /dev/null http://hato.example.com/ -v * Could not resolve host: hato.example.com * Closing connection 0 000
最後に
AWS 側の仕様やネットワーク構成なども調査しましたが、生成場所がわからず試しに行ったエラーでやっと解決できたので、ブログにしました。
なお、ALB の場合は次のトラブルシューティングが該当する場合があります。
Application Load Balancer のトラブルシューティング - Elastic Load Balancing
ロードバランサーは、レスポンスコード 000 を送信します。
HTTP/2 接続では、いずれかのヘッダーの圧縮された長さが 8 K バイトを超える場合、または 1 つの接続を介して処理されるリクエスト数が 10,000 を超える場合、ロードバランサーは GOAWAY フレームを送信し、TCP FIN を使用して接続を閉じます。
この記事が誰かのお役にたてば幸いです。
アノテーション株式会社について
アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。