From bb4e460e8c2a326fe54579853c32572096b4ae32 Mon Sep 17 00:00:00 2001 From: Sayan- <1415138+Sayan-@users.noreply.github.com> Date: Thu, 15 Oct 2026 00:39:50 +0000 Subject: [PATCH] Document interrupted HTTP/2 proxy responses --- proxies/errors.mdx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/proxies/errors.mdx b/proxies/errors.mdx index 8fa993b3..637b74fd 100644 --- a/proxies/errors.mdx +++ b/proxies/errors.mdx @@ -18,7 +18,7 @@ The header is set on every branded proxy-layer error response, including WebSock | `restricted_route_unavailable` | The destination requires a specialized egress route and Kernel could not build one. Kernel will not fall back to a provider known to reject the destination. | Yes, except on `.gov` destinations. There, create a new residential proxy with no targeting, country-only targeting, or a U.S. state, confirm it with [`POST /proxies/{id}/check`](https://kernel.sh/docs/api-reference/proxies/check-proxy-health), then use it for the session. | | `destination_route_unavailable` | The destination matches a per-host proxy route, but that route's proxy is unavailable, for example because it was deleted. Kernel does not fall back to the session proxy or a direct connection. | No. Assign an available proxy to the route, or remove the route. | | `proxy_unavailable` | A failure inside Kernel's own proxy layer, not your automation or the destination. | Yes | -| `origin_response_incomplete` | The destination closed the connection before sending a complete response. | Only if safe. The destination may have received the request, so retry only when repeating the action cannot cause duplicate changes. | +| `origin_response_incomplete` | The connection was interrupted before Kernel received response headers, including a dropped HTTP/2 connection or an unanswered HTTP/2 health-check PING. | Only if safe. The destination may have received the request, so retry only when repeating the action cannot cause duplicate changes. | | `provider_rejected` | The upstream proxy provider rejected the request before the destination connection was established. | No. Try a different proxy or proxy type, and check the credentials on a [custom proxy](/proxies/custom). | | `provider_blacklisted` | The upstream proxy provider blocks this destination. | No. Try a different proxy or proxy type, or disable the proxy for this destination. | | `destination_blocked` | Kernel policy blocks connections to internal and private addresses. | No. Use a public destination address. | @@ -54,6 +54,10 @@ async function navigate(page, url, attempts = 3) { `origin_response_incomplete` is deliberately absent from that set. The destination may have already acted on the request, so retrying it automatically can duplicate a submission. +This error can occur with or without an upstream proxy. It doesn't identify which part of the connection failed, and your server may have logged a successful response that never reached Kernel. For HTTP/2, Kernel checks a connection after 30 seconds without receiving a frame and closes it if its PING goes unanswered for another 15 seconds. This measures inactivity on the connection, not a fixed timeout for each request. + +If response headers have already been forwarded to the browser, Kernel cannot replace the status or add an error header. A connection drop at that point can surface as a truncated response body or a browser network error instead of a branded error page. + ## Observing proxy errors after the fact Proxy failures are also reported as `proxy_error` [browser telemetry](/browsers/telemetry/overview) events in the `network` category. Use the header to recover in the moment, and telemetry to attribute failures per session and per URL afterwards.