Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Incremental HTTP

Avatar for kazuho kazuho
October 01, 2026

Incremental HTTP

Avatar for kazuho

kazuho

October 01, 2026

More Decks by kazuho

Other Decks in Technology

Transcript

  1. 新しいRFCが出ました • RFC 10036: Incremental Forwarding of HTTP Messages •

    発行: August 2026 • 著者: ◦ Kazuho Oku, Fastly ◦ Tommy Pauly, Apple ◦ Martin Thomson, Mozilla
  2. インクリメンタル HTTPの使用例 • • • • • Server-sent Events gRPC

    (streaming) Resumable Uploads Chunked OHTTP … プロ る な 異 と P 方 T 双 T H て 」し tは e ド k ー c So グレ . b e プ ッ W .. ア 「 み に トコル を行う仕組 向通信
  3. インクリメンタル HTTPの使用例 • • • • • Server-sent Events gRPC

    (streaming) Resumable Uploads Chunked OHTTP … プロ る な 異 と P 方 T 双 T H て 」し tは e ド k ー c So グレ . b e プ ッ W .. ア 「 み ね に トコル を行う仕組 どくさいよ ん 向通信 どアレめ … だけ
  4. インクリメンタル HTTPは合法なの ? An HTTP message can be parsed as

    a stream for incremental processing or forwarding downstream. However, senders and recipients cannot rely on incremental delivery of partial messages, since some implementations will buffer or delay message forwarding for the sake of network efficiency, security checks, or content transformations. RFC 9110 Section 7.6 訳: HTTPメッセージの送受信において、部分的なメッセージの逐次配送を前提とする ことはできない。なぜなら、効率化やセキュリティチェック、コンテンツ変換などのため にメッセージをバッファリングしたり、転送を遅延させるHTTP実装も存在するからであ る
  5. インクリメンタル HTTPは合法なの ? An HTTP message can be parsed as

    a stream for incremental processing or forwarding downstream. However, senders and recipients cannot rely on incremental delivery of partial messages, since some implementations will buffer or delay message forwarding for the sake of network efficiency, security checks, or content transformations. 存在しない限り動く! 存在したらタイムアウトとか ... RFC 9110 Section 7.6 訳: HTTPメッセージの送受信において、部分的なメッセージの逐次配送を前提とする ことはできない。なぜなら、効率化やセキュリティチェック、コンテンツ変換などのため にメッセージをバッファリングしたり、転送を遅延させるHTTP実装も存在するからであ る
  6. Syntax: proxy_request_buffering on | off; Default: proxy_request_buffering on; Context: http,

    server, location This directive appeared in version 1.7.11. Enables or disables buffering of a client request body. When buffering is enabled, the entire request body is read from the client before sending the request to a proxied server. When buffering is disabled, the request body is sent to the proxied server immediately as it is received. In this case, the request cannot be passed to the next server if nginx already started sending the request body. from Nginx documentation
  7. 現在の状況 : lose-lose • アプリはインクリメンタルな挙動を使いたい ◦ 設計が単純になるため • プロキシはインクリメンタルをデフォルトにしたくない ◦

    セキュリティや効率上の理由 ▪ cf. Slowloris攻撃 • 結果:インクリメンタルに依存するアプリをプロキシ経由で 使おうとするたびに問題が発生し、原因調査の上、アプリ の再設計かプロキシの設定検討が必要に
  8. RFC 10036 • インクリメンタルな転送が必要な場合 : Incremental: ?1 というHTTPヘッダをつける • プロキシは、このヘッダを認識したにもかかわらず、インク

    リメンタルに転送ができない場合 : ◦ 501 Not Implemented - 永続的な拒否 ◦ 429 Too Many Requests - 一時的な拒否 応答を返す
  9. まとめ • リクエストをインクリメンタルにサーバに届けたい → Incremental: ?1 をリクエストにつける • レスポンスをインクリメンタルにクライアントに届けたい →

    Incremental: ?1 をレスポンスにつける • HTTP POSTで双方向通信 → Incremental: ?1 をリクエストレスポンス両方につける
  10. まとめ • リクエストをインクリメンタルにサーバに届けたい → Incremental: ?1 をリクエストにつける • レスポンスをインクリメンタルにクライアントに届けたい →

    Incremental: ?1 をレスポンスにつける • HTTP POSTで双方向通信 → Incremental: ?1 をリクエストレスポンス両方につける • プロキシは Incrementalに対応して!
  11. まとめ • リクエストをインクリメンタルにサーバに届けたい → Incremental: ?1 をリクエストにつける • レスポンスをインクリメンタルにクライアントに届けたい →

    Incremental: ?1 をレスポンスにつける • HTTP POSTで双方向通信 → Incremental: ?1 をリクエストレスポンス両方につける • プロキシは Incrementalに対応して! 向通 方 双 も て く ゃな じ t e k c o S Web て ... っ れ そ 信できる!
  12. まとめ I D T • リクエストをインクリメンタルにサーバに届けたい → Incremental: ?1 をリクエストにつける

    • レスポンスをインクリメンタルにクライアントに届けたい → Incremental: ?1 をレスポンスにつける • HTTP POSTで双方向通信 → Incremental: ?1 をリクエストレスポンス両方につける • プロキシは Incrementalに対応して! 向通 方 双 も て く ゃな じ t e k c o S Web て ... っ れ そ 信できる! W O T M T