テクノロジー · 実用ガイド

curl error 92でHTTP/2ストリームが異常終了?HTTP/1.1固定の前にリセットを保存

終了コード92はHTTP/2のフレームまたはストリーム障害で、単一原因ではありません。正確なリセット、再試行安全性、各境界、完全な応答を順に確認します。

curlクライアント、中継点、オリジンの境界を示すオリジナル技術イラスト。
オリジナルイラスト:同じエラー文字列だけではリセットを送った区間は特定できません。 Watch at Ease

終了コード92はHTTP/2のフレームまたはストリーム障害で、単一原因ではありません。正確なリセット、再試行安全性、各境界、完全な応答を順に確認します。

92はHTTP/2フレーミング層のストリームエラーです。 ストリームエラーと接続全体のエラーは別です。 HTTP/1.1成功だけでは故障箇所は確定しません。

再現可能な要求と正確なエラーを固定する

curl -V、メソッド、URL、終了値、ストリーム番号、エラー名を記録し、共有前に認証情報や本文を削除します。

可能なら読み取り専用端点を使います。ブラウザー成功でも、交渉やプロキシ経路が異なるため反証にはなりません。

再試行前に副作用を分類する

GET/HEADでも結果確認は必要です。POST、PUT、PATCH、DELETEは処理済みの可能性があるため、ログや冪等キーを先に確認します。

RFC 9113のREFUSED_STREAMやGOAWAY境界の保証と、一般のCANCELやINTERNAL_ERRORを混同しません。

秘匿化したトレースで境界を探す

まず--verbose、現行curlでは--trace-config ids,time,http/2,sslも使えます。機密を含むので非公開で保存します。

クライアント、CDN、プロキシ、オリジンの時刻を突き合わせます。92だけでは送信元は分かりません。

プロトコルだけを変えて比較する

同じURL、ペイロード、資格情報、経路で--http2と--http1.1を比較します。後者の成功はHTTP/2依存を示すだけです。

バッファ、分割、ネットワーク、プロトコルを同時に変えず、一変数ずつ比較して版も記録します。

完全性を確認して限定回避する

状態、ヘッダー、バイト数やハッシュ、アプリ結果を検証します。ダウンロードは新しい一時名に書きます。

安全性、完全性、範囲、期限が揃う時だけHTTP/1.1を一時回避にし、副作用不明なら停止します。

再試行の安全性、制御した比較、出力検証を示すオリジナル技術イラスト。
オリジナル技術イラスト:副作用を分類してから再試行し、完全な出力を検証します。 Watch at Ease