windmill-labs/windmill · error
Error streaming get request from authed http client to {url}
Error message
Error streaming get request from authed http client to {url} with query {query:?}: {e:#?} What it means
Same as [918] but for `get_streaming`, which uses the streaming HTTP client (no total timeout) for large responses such as repository archives. It fires when `send()` fails at transport level — connection refused/reset, DNS, TLS, or an immediate stream error. Called by fetch_repo_archive.
Source
Thrown at backend/windmill-common/src/client.rs:69
pub async fn get_streaming(
&self,
url: &str,
query: Vec<(&str, String)>,
) -> anyhow::Result<Response> {
self.force_client
.as_ref()
.unwrap_or(&HTTP_CLIENT_STREAMING)
.get(url)
.query(&query)
.header(
reqwest::header::AUTHORIZATION,
reqwest::header::HeaderValue::from_str(&format!("Bearer {}", self.token))?,
)
.send()
.await
.map_err(|e| {
tracing::error!("Error streaming get request from authed http client to {url} with query {query:?}: {e:#?}");
anyhow::anyhow!("Error streaming get request from authed http client to {url} with query {query:?}: {e:#?}")
})
}
pub async fn get_id_token(&self, audience: &str) -> anyhow::Result<String> {
let url = format!(
"{}/api/w/{}/oidc/token/{}",
self.base_internal_url, self.workspace, audience
);
let response = self
.force_client
.as_ref()
.unwrap_or(&HTTP_CLIENT)
.post(&url)
.header(
reqwest::header::AUTHORIZATION,
reqwest::header::HeaderValue::from_str(&format!("Bearer {}", self.token))?,
)
.send()View on GitHub (pinned to e474e8803c)
Solutions
- Check the logged `e#` cause for the concrete transport failure (connect vs reset vs TLS).
- Verify the repository/archive base URL and credentials, then curl the endpoint manually.
- Retry with backoff — long streams are prone to transient resets.
- If a proxy terminates long connections, raise its idle/streaming limits or bypass it for this host.
Defensive patterns
Strategy: retry
Validate before calling
const url = new URL(baseUrl + archivePath);
if (!(url.protocol === 'https:' || url.protocol === 'http:')) throw new Error('bad archive URL'); Try / catch
match client.get_streaming(&url, Some(&query)).await {
Ok(resp) => resp,
Err(e) if e.to_string().contains("Error streaming get request") => {
// transient stream failures are common on large archives; retry with backoff
retry_with_backoff(3, || client.get_streaming(&url, Some(&query))).await
}
Err(e) => return Err(e),
} Prevention
- Retry long/streaming downloads — they are prone to transient resets
- Raise proxy idle/streaming timeouts for large archives
- Verify repo host and credentials before fetching
- Prefer HTTPS with valid certs; avoid TLS-intercepting proxies on these hosts
When it happens
Trigger: fetch_repo_archive (or any get_streaming call) when the target server is unreachable, the connection drops while starting the stream, or the URL is wrong — backend/windmill-common/src/client.rs:69.
Common situations: Downloading large repo archives through a proxy that kills long-lived connections; git/DBT repository host misconfigured or offline; transient network partitions; TLS interception on large transfers.
Understand the failure class
Background: 'Something went wrong' / 'Request failed (500)' / 'HTTP error! status: 404' — what failed HTTP requests actually mean and how to find the real cause — this error's family across 28 libraries.
Related errors
- Error executing get request from authed http client to {url}
- e (Slack chat.update request error propagated via anyhow)
- ApiError with mapped HTTP status message (e.g. "Not Found",
- Generic Error: status: ${errorStatus}; status text: ${errorS
- No response body for SSE stream
AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03).
Data as JSON: /api/errors/d37e5570a5941120.
Report an issue: GitHub.