Skip to content

Axum: reuse outbound clients and preserve proxy HTTP semantics #395

Open

Description

@ChristianPavilonis

Description

Main constructs AxumProxyClient::try_new() per converted request (crates/edgezero-adapter-axum/src/request.rs:66), fixes a 30-second reqwest timeout and uses replacing response-header insertion (crates/edgezero-adapter-axum/src/proxy.rs:28). PR #275 retires this client in favor of shared native outbound transport, explicit wire policies and streaming. Remaining work is integrated pooling/wire/configuration acceptance.

Steps to reproduce

Proxy repeated requests to a local origin recording accepted connections, two Set-Cookie values, Connection-nominated fields and Host. Exercise cross-origin redirects, sensitive headers, decoding, deadlines, connection failures and buffered/streamed bodies through the final server path.

Expected behavior

Incoming requests share outbound pools and preserve permitted repeated fields/body bytes. Redirect, timeout, TLS, destination and retry behavior are explicit; failures remain safe and release resources.

Impact

Per-request clients lose connection reuse; replacing repeated fields can break cookies and inherited client defaults can alter proxy semantics. Open replacement code is not merged production evidence.

Proposed fix

Adopt accepted #275 HttpClient/AxumOutboundClient contracts and verify the final native service instead of restoring proxy.rs. Reuse existing wire/framing/header policies; add only missing tests or configuration/startup gaps. Check transport initialization failure before readiness with #392/#396. Keep TLS verification enabled and retries explicit. Bounded transport acceptance depends on #394; pooling/header preparation can proceed independently.

Done when

  • Re-audit the accepted PR feat: implement portable outbound HTTP and request lifecycle contracts #275 implementation and record which checks are already covered. Add only residual changes and missing production acceptance evidence.
  • The accepted standard server path uses its shared outbound transport, and a local origin test proves connection reuse across incoming requests.
  • Two Set-Cookie response values survive the complete proxy path unchanged.
  • Tests cover hop-by-hop filtering, Connection-nominated headers, Host handling, and header-value preservation.
  • Redirect behavior is explicit and tested, including cross-origin redirects and sensitive headers.
  • Configured connect/request deadlines and connection failures return safe responses and release work.
  • Existing buffered-body and new streamed-body proxy tests pass.
  • Default TLS verification, destination-policy ownership, and retry behavior are documented.

Related

Metadata

Metadata

Labels

No labels
No labels

Type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions