408 Request Timeout

クライアントがリクエストの送信に時間をかけすぎました。

使いどころ

アイドル状態の接続。クライアントは安全に再試行できます。

よくある原因と対処法

クライアントが時間内に完全なリクエストを送らなかったため、サーバーが接続を閉じました。よくある原因は、大きなアップロード中の遅いモバイル回線、ブラウザーが投機的に開いたまま何も送らない接続、サーバーの上限を超えてアイドル状態が続いた keep-alive 接続です。nginx のタイマーは client_header_timeout と client_body_timeout で、どちらもデフォルトは 60 秒です。

アイドル状態の keep-alive 接続が閉じられるとブラウザーは透過的に再試行するため、ユーザーが 408 を目にすることはほとんどありません。主にアクセスログで気づくことになり、リクエスト行のないエントリーはプリコネクトによるもので無害です。遅い回線での大きなアップロードには、client_body_timeout を引き上げるか、チャンク分割による再開可能なアップロードに切り替えてください。サーバーはリクエストを処理していないので、クライアントは安全に再試行できます。

クライアントエラー (4xx)

4xx はクライアントエラーです。リクエスト自体が誤っている、認証されていない、または存在しないものを指しています。同じリクエストを再試行しても解決しません。

レスポンスでの表示

HTTP/1.1 408 Request Timeout

返し方

Node.js / Expressres.status(408).end()
Python / Flaskreturn '', 408
nginxreturn 408;

確認方法

curl -s -o /dev/null -w "%{http_code}\n" https://example.com/

HTTP ステータスコードを開く