何が起きたのか?
425 は「まだ授業が始まってもいないのに先生に質問をしてしまった」というサインです。 教室で言えば、先生が教室に入って黒板の準備をしている途中、生徒が先回りして質問を始めてしまった——そんな場面に近いです。サーバーは「もう少し進んでから受け付けます」と返しています。
実務では TLS 1.3 の 0-RTT (Early Data) と呼ばれる高速化機能で起きます。ハンドシェイクの完了を待たずに送られたデータは、悪意のある第三者にコピーされて再送される可能性があるため、サーバーは安全のためにいったん拒否することがあります。
黒板からのひとこと
授業前の慌ただしい時間に質問を投げると、先生は「ちょっと待って、まずは出席を取ってからね」と返すことがあります。先生が冷たいわけではなく、まずは授業の枠組みが整ってから受け付けたい、という気持ちです。
425 もそれと同じで、サーバーは「正規のハンドシェイクが終わってから受け付ける」と言っています。クライアントは少し待って通常のフローでやり直せば、たいてい通ります。
解決への歩み
大丈夫、次はこうしてみよう:
- 0-RTT を使わずに再送:通常のハンドシェイク後にリクエストを送り直す
- HTTP クライアント設定を確認:early data の利用条件を見直す
- リクエストの冪等性を確認:副作用のある操作には 0-RTT を使わない
- TLS 設定を整理(管理者向け):0-RTT を許可するエンドポイント、許容するメソッドを明確化
実際にはこう見える
$ リクエスト
curl -i https://example.com/some/path ↓ レスポンス
HTTP/1.1 425 Too Early
Content-Type: text/html; charset=utf-8
<!DOCTYPE html>
<html><body><h1>425 Too Early</h1></body></html>