feat(supervisor): stream HTTP session hook uploads on the plain-HTTP forward proxy

Offen
#5,086 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
32/100
Issue-Typ
Feature
Klarheit
Größtenteils klar
Aktivitätsstatus
Aktiv
Tech-Stack
rust
Bereich
backend, networking

Rechercherichtung

Start by reading ForwardMiddlewarePipeline::apply in crates/openshell-supervisor-network/src/proxy.rs and compare it with how request_body_delivery(config) in l7/relay.rs picks a delivery per route. Read docs/extensibility/supervisor-middleware/operations.mdx for the current 4 MiB wording. Write the forward-proxy denial test first (body_over_limit, upstream sees nothing), then stream middleware output for routes that need no body-wide work. Done means the new tests pass and the limits text matches actual behavior.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

User Story

As an operator running an HTTP session hook that streams request bodies (for example a signing or redaction stage), I want plain-HTTP requests sent through the forward proxy to behave like requests on the L7 relay, so that uploads larger than 4 MiB are not denied depending on how the sandbox reached the endpoint.

Problem Statement

HTTP session hooks have no total size cap on STREAM request bodies on the L7 relay paths. The plain-HTTP forward proxy (ForwardMiddlewarePipeline::apply in crates/openshell-supervisor-network/src/proxy.rs) always passes RequestBodyDelivery::WITHHOLD, because it writes the request upstream as one buffer. The preflight therefore advertises limits.max_output_body_bytes of 4 MiB (MAX_MIDDLEWARE_PAYLOAD_BYTES), and a larger upload that matches a session request hook fails with failure_code: body_over_limit.

The limit is documented in Supported Operations (forward-proxy requests buffer output, 4 MiB), but the same hook behaves differently depending on the path a request takes. There is also no test covering the forward-proxy denial.

Raised in review of #4359: https://github.com/NVIDIA/OpenShell/pull/4359#discussion_r4381863330

Impact / Why This Matters
  • Inconsistent behavior for one middleware config: an upload over 4 MiB succeeds via the L7 relay and fails via the forward proxy.
  • It undercuts the "no total size cap" goal of HTTP session hooks for clients that use HTTP_PROXY with plain HTTP.
Proposed Design
  1. Add a test now: a forward-proxy upload over 4 MiB that matches a session request hook is denied with failure_code: body_over_limit, and the upstream sees nothing.
  2. Stream middleware output on the forward proxy, like the REST relay, when the route needs no body-wide work (no SigV4 signing, body credential rewrite, or body-aware L7 re-evaluation such as JSON-RPC/MCP/GraphQL). Keep WITHHOLD with its route limit for those cases.
  3. Update the Supported Operations limits text once forward-proxy streaming lands.
Acceptance Criteria
  • A test covers the 4 MiB forward-proxy denial (body_over_limit, nothing forwarded).
  • A plain-HTTP forward-proxy upload over 4 MiB through a STREAM session request stage succeeds on routes that need no body-wide work, with max_output_body_bytes unset in the preflight.
  • Routes that still need the whole body keep their documented limits.
  • Docs describe the forward-proxy behavior.
Alternatives Considered
  • Keep buffering and only document the limit. That leaves the path-dependent behavior in place.
Agent Investigation
  • proxy.rs ForwardMiddlewarePipeline::apply calls apply_request_with_delivery(..., RequestBodyDelivery::WITHHOLD) with the comment "The forward proxy writes the request as one buffer, so middleware output is withheld and inlined."
  • The L7 REST relay chooses delivery per route via request_body_delivery(config) in l7/relay.rs.
  • Docs: docs/extensibility/supervisor-middleware/operations.mdx (request output buffering paragraph) already lists the forward proxy among buffered paths.
Vorherrschende Sprache
Rust
Sterne
20.6k
Forks
2k
Ø Merge
2 T. 14 Std.
Gemergte PRs (30 T.)
275

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus NVIDIA/OpenShell

Alle Issues in NVIDIA/OpenShell

Ähnliche Issues

Weitere Issues zu Rust

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.