長時間の HTTP ジョブにおけるプロキシのアイドルタイムアウト
サーバー作業が長引きプロキシのアイドル上限に達したときは、最終レスポンスに任意のバイトを挿入するのではなく、ポーリングか定義済みのストリーミング形式を選びます。
サービスが数分間沈黙し、プロキシがタイムアウトする場合は、ハートビート用バイトを追加する前に、クライアントが何を受け取るべきかを決めます。タイマーを延ばすことは1回の待機には役立ちますが、どの進捗が有効かはレスポンスの契約が決めます。
| アプリケーション設計 | 進捗の契約 |
|---|---|
| 非同期ジョブ | 監視を表す表現を伴う 202 Accepted。その後、有限のステータス要求と明示的な完了/失敗状態 |
| Server-Sent Events ストリーム | Content-Type: text/event-stream と、SSE クライアントが理解するレコード |
202 はジョブの成功を約束しません。SSE では、コメントレコードは次のようになります:
: heartbeat
コロンはそれをアプリケーションイベントではなくコメントにします。HTML のオーサリングノートは、一部の古いプロキシのアイドル挙動に対して約 15 秒ごとの定期的なコメントを提案しています。これは指針であり、普遍的なタイムアウト保証ではありません。
ヘッダーを完了し、アプリケーション/配信スタックがレコードをローカルにバッファリングするのではなく解放するようにします。まだ送信されていないバイトは、下流の中間装置をアクティブに保つことはできません。
通常の JSON やバイナリ内容に SSE コメントを挿入しないでください。HTTP/1.1 の長さゼロのチャンクは chunked ボディを終了させるため、繰り返し可能な空のハートビートではありません。
操作の期限とキャンセルポリシーを維持します。トラフィックの活動だけでは、有用なジョブの進捗や有効な最終結果を示しません。