Bound HTTP/1 request metadata queue under pipelining

Abierto
#31 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
58/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Tranquilo
Stack tecnológico
rust
Área
networking

Línea de trabajo

Empieza en src/http_proxy.rs, en proxy_http1_rewriting y rewrite_request_stream, y luego sigue cómo los metadatos de la solicitud corresponden a las solicitudes ordinarias, HEAD, las respuestas provisionales 1xx, Upgrade y CONNECT. Ejecuta las pruebas existentes de reescritura HTTP/1 antes de añadir una prueba upstream con respuesta retenida que demuestre que los metadatos permanecen acotados, e incluye el caso de rechazo MAX_HEADER_SIZE + 1 para el límite exacto de 64 KiB.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Follow-up from the post-merge review of #23.

Problem

The HTTP/1 rewriting path creates a tokio::sync::mpsc::unbounded_channel for request/response correspondence. rewrite_request_stream queues one RequestMeta before every forwarded request.

If an upstream continues reading requests but delays its responses, an unauthenticated client can pipeline requests indefinitely. The request pump continues adding metadata while the response pump cannot drain it, allowing per-connection memory growth without a defined bound.

This affects routes using HTTP header rewriting for X-Forwarded-For or JA3/JA4 forwarding.

Location

  • src/http_proxy.rs: proxy_http1_rewriting, rewrite_request_stream
  • Introduced by #23 while fixing Upgrade/CONNECT response correspondence.

Acceptance criteria

  • Replace the unbounded metadata channel with bounded backpressure or enforce a documented maximum number of outstanding pipelined requests.
  • The request pump must stop advancing when the response side reaches that limit.
  • Preserve correct correspondence for ordinary requests, HEAD, interim 1xx responses, Upgrade, and CONNECT.
  • Add a test with an upstream that reads requests but withholds responses, proving queued metadata remains bounded.
  • Include the exact 64 KiB request-header boundary in the test cleanup: MAX_HEADER_SIZE + 1 must be rejected rather than relying on the current 70 KiB case.
Lenguaje dominante
Rust
Estrellas
1
Forks
0
Merge medio
19 h 12 min
PR fusionados (30 d)
13

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de HarperFast/symphony

Todos los issues de HarperFast/symphony

Issues similares

Más issues de Rust

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.