< HTTP/1.1 460 Client Closed Connection460 Client Closed Connection (AWS ALB)
An AWS ALB 460 means the client disconnected before the load balancer idle timeout. Confirm it in access logs, then compare client and target timings.
- Cacheable
- n/a (client disconnected)
- Retry?
- Check the client deadline and target response time before retrying
- Usually sent by
- AWS ALB (client disconnected)
- Spec
- AWS ALB HTTP 460
On this page
TL;DR: A 460 in your AWS Application Load Balancer logs means the client hung up before your backend answered, usually because the client’s own timeout is shorter than your slow endpoint. Speed up the target or raise the client’s timeout. Raising the ALB idle timeout won’t help, since the client gave up first.
What it means
460 is an AWS ALB code, not a standard HTTP status. “Client Closed Connection” is a descriptive label here; AWS documents the numeric code without a reason phrase. You’ll only ever see it in logs: the client has already disconnected, so no response with this code reaches it.
First figure out who is directly in front of the ALB. If it’s another proxy, its timeout matters as much as the end user’s. Sketch the real request path before you touch any timeouts.
Confirm it in access logs
Filter ALB access logs on elb_status_code = 460. That field is the load balancer’s status. target_status_code holds the target’s response code, or - when no target response was recorded. Even with a - there, the application may have started the work, or even finished it. See AWS’s field definitions.
Match the timestamp, URL, and client against the caller’s logs. Note when the caller started, when it cancelled, and when the target finished. Then check the ALB’s configured idle timeout with this read-only AWS CLI call, after setting ALB_ARN to your load balancer’s ARN:
aws elbv2 describe-load-balancer-attributes \
--load-balancer-arn "$ALB_ARN" \
--query "Attributes[?Key=='idle_timeout.timeout_seconds']"
The default is 60 seconds, but compare against whatever your deployment actually uses.
Fix it
If the cancellations line up with the client’s configured timeout, you have two options: make the target finish sooner, or raise that client timeout if the caller can afford to wait. AWS specifically recommends checking the client timeout against the ALB idle timeout. After the change, retest the slow endpoint with the same caller.
If the caller cancelled on purpose, such as a user navigating away or a script aborting, find out why before you change any configuration. For requests that modify state, check whether the operation went through before retrying. The client disconnecting doesn’t roll anything back on the server.
Do not confuse it with an ALB idle timeout
When the target doesn’t respond before the ALB idle timeout, AWS logs a 504 instead. That’s a different investigation from a 460. The question is who stopped waiting first: the client (460) or the ALB (504). The access log tells you which.
Related
Frequently asked questions
Is 460 a standard HTTP status code?
No. It is specific to AWS Application Load Balancer, which logs it when the client closes the connection before the ALB idle timeout runs out.
Does 460 mean the ALB timed out?
No, the client gave up first. When the target is too slow and the ALB idle timeout runs out, AWS logs a 504 instead.
Where do I look for 460?
Filter the ALB access logs for elb_status_code=460, then match those requests against your client logs (when and why it cancelled) and your target logs (how long the request actually took).
Sources
- AWS: Troubleshoot ALB HTTP 460docs.aws.amazon.com
- AWS: ALB access logsdocs.aws.amazon.com
- AWS: Load balancer attributesdocs.aws.amazon.com
- AWS CLI: describe-load-balancer-attributesdocs.aws.amazon.com
- IANA HTTP Status Code Registryiana.org
- MDN: HTTP response status codesdeveloper.mozilla.org
- RFC 9110: Status Codesrfc-editor.org
Related
499 Client Closed Request (nginx)
nginx 499 means the client hung up before the response was sent. Why it spikes with slow upstreams, how proxy_ignore_client_abort works, and how to debug it.
408 Request Timeout
408 Request Timeout means the server gave up waiting for the client to finish sending. Tune nginx, Apache, Node and ALB timeouts and tell it apart from 504.
504 Gateway Timeout: nginx, ALB and Cloudflare Fixes
Fix 504 Gateway Timeout: nginx proxy_read_timeout (60s default), ALB 60s idle, API Gateway 29s, Cloudflare 524 at 125s, with error-log strings and curl timing.
463 Too Many Forwarded IP Addresses (AWS ALB)
AWS ALB 463 rejects an X-Forwarded-For header with more than 30 IP addresses. Trace proxy appends and correct the forwarding chain at a trusted ingress.