You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The router uses a hardcoded CorsLayer::permissive() (src/routes/mod.rs), which differs from the Python proxy in two ways:
Not configurable. The Python proxy exposes allow_origins in settings and runs with allow_credentials=True; the Rust proxy always answers access-control-allow-origin: * with no credentials support, and there is no setting to narrow origins.
Duplicate Vary header lines. Each tower-http layer appends its own line, so every response carries:
Starlette merges these into a single Vary line. The two forms are semantically identical per RFC 9110, but intermediaries that only read the first line mishandle it — and the CORS line is noise anyway while the origin is a wildcard (the response does not vary by origin).
Current behaviour
The router uses a hardcoded
CorsLayer::permissive()(src/routes/mod.rs), which differs from the Python proxy in two ways:Not configurable. The Python proxy exposes
allow_originsin settings and runs withallow_credentials=True; the Rust proxy always answersaccess-control-allow-origin: *with no credentials support, and there is no setting to narrow origins.Duplicate
Varyheader lines. Each tower-http layer appends its own line, so every response carries:Starlette merges these into a single
Varyline. The two forms are semantically identical per RFC 9110, but intermediaries that only read the first line mishandle it — and the CORS line is noise anyway while the origin is a wildcard (the response does not vary by origin).