HTTP 499 レスポンスコードは、サーバーが応答する前にクライアントが接続を切ったときに発生します。
499 レスポンスコードの例は、大きなファイルのアップロードや長時間かかるリクエストなど、サーバーの処理が終わる前にクライアントがタイムアウトして接続を閉じる場合です。TCP の 3 ウェイハンドシェイクの問題でも発生します。クライアント側のタイムアウト設定により、接続が途中で切れるためです。
499 Client Closed Request ステータスコードは nginx 固有です。サーバーがリクエストを処理している最中にクライアントが接続を閉じ、サーバーがステータスコードを返せなかったことを示します。このステータスコードは、Enterprise 向けの Cloudflare Logs とステータスコード分析に表示されます。
補足すると、HTTP など上位のプロトコルが通信を始める前に、Cloudflare とウェブサイトのオリジンサーバーの間で TCP 接続を確立する必要があります。TCP は 3 ウェイハンドシェイクで接続を確立します。
- SYN: Cloudflare がオリジンサーバーへ SYN パケットを送ります。
- SYN+ACK: オリジンサーバーが SYN+ACK パケットで応答します。
- ACK: Cloudflare がオリジンサーバーへ ACK パケットを返します。
この時点で接続が確立し、Cloudflare とオリジンサーバーの両方が通信できます。ただし、オリジンサーバーが 19 秒以内に SYN+ACK を返さない場合、Cloudflare はもう 1 回再試行し、そのときのタイムアウトは 15 秒です。
クライアント側のタイムアウト設定によって、次のケースが起きえます。
- クライアントのタイムアウトが短い(38 秒未満): クライアントのタイムアウトが短いと、Cloudflare の処理が終わる前に接続を放棄します。ログには
499レスポンスコードが残ります。 - 接続成功(38 秒超): クライアントのタイムアウトが長く、TCP 接続が確立した場合、HTTP トランザクションは通常どおり進み、Cloudflare は標準のステータスコード(
HTTP 200)を返します。 - ハンドシェイク失敗: クライアントのタイムアウトは長いが、Cloudflare がオリジンサーバーとの TCP ハンドシェイクを確立できない場合、Cloudflare は
HTTP 522ステータスコードを返します。
Origin Analytics で、オリジンの応答が遅く、クライアントが先に接続を閉じているかを確認します。P95 のオリジン応答時間が長い場合は、Top endpoints テーブルで遅いエンドポイントを特定し、最適化して 499 エラーを減らします。