2xx success
The request was received, understood and accepted.
RFC 9110Cacheable by defaultAPNs
The request succeeded. The body holds the result: the page for a GET, the outcome of the action for a POST.
Common causes
What to do: If an API returns 200 with an error message in the body, consider a proper 4xx or 5xx so clients and monitors can tell.
201 Created
RFC 9110
A new resource was created. The Location header should point to it.
Common causes
- A successful POST (or PUT) that created something
What to do: Return Location and, usually, the created resource.
202 Accepted
RFC 9110
The request was accepted for processing that hasn't finished. Nothing guarantees it will succeed.
Common causes
- Queued or asynchronous jobs
What to do: Give the client a way to check progress, such as a status URL in Location.
203 Non-Authoritative Information
RFC 9110Cacheable by default
Success, but a proxy changed the response the origin sent.
Common causes
What to do: Rare; nothing to fix unless the change is unwanted.
204 No Content
RFC 9110Cacheable by default
Success with no body. Common for DELETE, for PUT that returns nothing and for CORS preflight responses.
Common causes
- The server has nothing to return
What to do: Don't send a body with 204; some clients hang or error if you do.
205 Reset Content
RFC 9110
Success; the client should reset the form or view that sent the request.
Common causes
What to do: Nothing to fix.
206 Partial Content
RFC 9110Cacheable by default
The body holds only the requested byte ranges (Range header). Used by video players, resumable downloads and PDF viewers.
Common causes
- A Range request the server honoured
What to do: Send Accept-Ranges: bytes and correct Content-Range headers, or seeking in media breaks (Safari is strict).
207 Multi-Status
RFC 4918 (WebDAV)
A WebDAV response with a separate status for each of several resources in an XML body.
Common causes
- WebDAV operations on collections
What to do: Read each status in the body.
208 Already Reported
RFC 5842 (WebDAV)
Inside a 207 response: members of this binding were already listed and aren't repeated.
Common causes
What to do: Nothing to fix.
226 IM Used
RFC 3229
The server applied instance manipulations (delta encoding) to the response.
Common causes
- Delta encoding, rarely deployed
What to do: Nothing to fix.
3xx redirection
The client must take another step, usually follow the Location header.
300 Multiple Choices
RFC 9110Cacheable by default
Several representations are available and the server didn't pick one.
Common causes
- Rare; some content negotiation setups
What to do: Prefer redirecting to one choice.
301 Moved Permanently
RFC 9110Cacheable by default
The resource has a new permanent URL, given in Location. Search engines move ranking signals to the new URL. Browsers may change a POST into a GET when following it.
Common causes
- A changed URL, a domain move, http to https, trailing-slash rules
What to do: Redirect straight to the final URL (no chains), and use 308 when a POST must stay a POST.
RFC 9110
A temporary redirect to the URL in Location. Browsers usually follow it with GET.
Common causes
- Login redirects, A/B tests, temporary maintenance pages
What to do: Use 301 or 308 for permanent moves so search engines update; use 307 if the method must not change.
303 See Other
RFC 9110
Look at another URL with GET. The standard answer after a form POST, so a reload doesn't resubmit the form.
Common causes
- Post/Redirect/Get pattern
What to do: Nothing to fix.
304 Not Modified
RFC 9110
The cached copy is still valid (the request carried If-None-Match or If-Modified-Since). No body is sent.
Common causes
- Normal revalidation of cached files
What to do: If changes don't show, check that the ETag or Last-Modified changes when the file does, or use versioned file names.
305 Use Proxy
RFC 9110 (deprecated)
Deprecated for security reasons; clients ignore it.
Common causes
What to do: Don't use it.
306 (Unused)
RFC 9110 (reserved)
Reserved. It was "Switch Proxy" in a draft and is no longer used.
Common causes
What to do: Don't use it.
307 Temporary Redirect
RFC 9110
A temporary redirect that keeps the method and body: a POST stays a POST. Browsers also show 307 internally for HSTS upgrades to https.
Common causes
- Temporary moves of API endpoints; HSTS (an "internal redirect" in DevTools)
What to do: Nothing to fix for HSTS; for real moves, decide between temporary (307) and permanent (308).
308 Permanent Redirect
RFC 9110Cacheable by default
A permanent redirect that keeps the method and body. The safe choice for permanently moved API endpoints.
Common causes
- Permanent URL changes where POST must stay POST
What to do: Update clients to the new URL; keep the redirect for old ones.
4xx client errors
Something in the request is wrong. Fix it before trying again.
400 Bad Request
RFC 9110APNs
The server can't process the request because something in it is malformed: syntax, framing, parameters or a too-large cookie.
Common causes
- Invalid JSON or form data
- A missing or wrong Content-Type
- Oversized or corrupted cookies
- Bad characters in the URL
What to do: Read the error body, validate the payload, check Content-Type, and clear the site's cookies if a browser shows it.
Retry: Don't retry unchanged: fix the request first.
From Apple's push service, the JSON body's reason says more: see APNs error codes.
401 Unauthorized
RFC 9110
Authentication is missing or invalid. Despite the name, it means unauthenticated; the server must send WWW-Authenticate.
Common causes
- No Authorization header
- An expired or malformed token
- A wrong API key
What to do: Send valid credentials; refresh an expired token and retry once.
Retry: Retry once after refreshing credentials; otherwise don't.
402 Payment Required
RFC 9110 (reserved)
Reserved for future use. Some APIs return it when a plan's quota or billing has run out.
Common causes
- An unpaid account or exhausted quota at some providers
What to do: Check the provider's billing page.
Retry: Don't retry unchanged: fix the request first.
403 Forbidden
RFC 9110APNs
The server understood who you are (or doesn't care) and refuses. Re-authenticating won't help.
Common causes
- Missing permissions
- IP blocks, WAF or bot protection rules
- File permissions on the server
- Directory listing disabled
What to do: Check the account's permissions, the WAF or firewall logs, and file ownership on the server.
Retry: Don't retry unchanged: fix the request first.
From Apple's push service, the JSON body's reason says more: see APNs error codes.
404 Not Found
RFC 9110Cacheable by defaultAPNs
No resource at this URL, or the server won't say whether one exists. Cacheable by default.
Common causes
- A typo or a deleted page
- A missing route or rewrite rule
- Wrong base path or case on a case-sensitive server
What to do: Fix the link, or redirect a moved page with 301. For content removed for good, 410 Gone says so explicitly.
Retry: Don't retry unchanged: fix the request first.
From Apple's push service, the JSON body's reason says more: see APNs error codes.
405 Method Not Allowed
RFC 9110Cacheable by defaultAPNs
The URL exists but doesn't accept this method. The Allow header lists those it does.
Common causes
- POST to a static file
- A route defined only for GET
- A CORS preflight (OPTIONS) the server doesn't handle
What to do: Use an allowed method, or add the method or the OPTIONS handler on the server.
Retry: Don't retry unchanged: fix the request first.
From Apple's push service, the JSON body's reason says more: see APNs error codes.
406 Not Acceptable
RFC 9110
The server can't produce a representation matching the Accept headers.
Common causes
- An Accept header the API doesn't support
What to do: Send Accept: application/json (or */*).
Retry: Don't retry unchanged: fix the request first.
407 Proxy Authentication Required
RFC 9110
Like 401, but a proxy between you and the server wants credentials.
Common causes
What to do: Configure the proxy credentials in the client.
Retry: Don't retry unchanged: fix the request first.
408 Request Timeout
RFC 9110
The server gave up waiting for the client to finish sending the request, and usually closes the connection.
Common causes
- A slow or stalled upload
- Idle keep-alive connections that the server closed
What to do: Retrying is safe: the server didn't process the request.
Retry: Safe to retry: the request wasn't processed.
409 Conflict
RFC 9110
The request conflicts with the current state of the resource.
Common causes
- Edit conflicts
- Creating something that already exists
- Version mismatches
What to do: Fetch the current state, resolve the conflict and send again.
Retry: Don't retry unchanged: fix the request first.
RFC 9110Cacheable by defaultAPNs
The resource was deliberately removed and won't come back. Cacheable by default. APNs uses it for device tokens that are no longer active.
Common causes
- Deleted content
- An expired device token (APNs)
What to do: Remove links to it; for APNs, stop sending to that token.
Retry: Don't retry unchanged: fix the request first.
From Apple's push service, the JSON body's reason says more: see APNs error codes.
411 Length Required
RFC 9110
The server wants a Content-Length header.
Common causes
- A chunked upload to a server that doesn't accept it
What to do: Send Content-Length.
Retry: Don't retry unchanged: fix the request first.
412 Precondition Failed
RFC 9110
A condition in the request (If-Match, If-Unmodified-Since) is false: someone else changed the resource.
Common causes
What to do: Fetch the latest version and retry with its ETag.
Retry: Don't retry unchanged: fix the request first.
413 Content Too Large
RFC 9110APNs
The request body is larger than the server allows. Formerly "Payload Too Large".
Common causes
- Upload limits in nginx (client_max_body_size), PHP, a CDN or an API
- APNs payloads over 4 KB (5 KB for VoIP)
What to do: Raise the limit on the server, or send less data.
Retry: Don't retry unchanged: fix the request first.
From Apple's push service, the JSON body's reason says more: see APNs error codes.
414 URI Too Long
RFC 9110Cacheable by default
The URL is longer than the server will read.
Common causes
- Huge query strings
- Redirect loops that keep appending parameters
What to do: Move data into a POST body; check for redirect loops.
Retry: Don't retry unchanged: fix the request first.
415 Unsupported Media Type
RFC 9110
The server doesn't accept the body's format.
Common causes
- A wrong or missing Content-Type
What to do: Send the Content-Type the API expects, such as application/json.
Retry: Don't retry unchanged: fix the request first.
416 Range Not Satisfiable
RFC 9110
The requested byte range is outside the file.
Common causes
- Resuming a download of a file that changed
What to do: Request the whole file again.
Retry: Don't retry unchanged: fix the request first.
417 Expectation Failed
RFC 9110
The server can't meet the Expect header.
Common causes
- Expect: 100-continue through a server that doesn't support it
What to do: Send without the Expect header.
Retry: Don't retry unchanged: fix the request first.
418 (Unused) I'm a teapot
RFC 9110 (reserved)
An April Fools' code from RFC 2324. RFC 9110 reserves 418 so it is never given a real meaning; some servers return it as a joke or to turn away bots.
Common causes
- Easter eggs, bot blocking
What to do: Nothing to fix unless a server uses it to block you.
Retry: Don't retry unchanged: fix the request first.
421 Misdirected Request
RFC 9110
The request reached a server that can't answer for that host, typically on a reused HTTP/2 connection.
Common causes
- HTTP/2 connection coalescing across hosts with different certificates
What to do: Clients retry on a new connection; servers should serve the right certificate per host.
Retry: Retry on a new connection.
422 Unprocessable Content
RFC 9110
The body is well formed but its content is invalid, such as a failed validation.
Common causes
- Validation errors in APIs
What to do: Read the error details and correct the fields.
Retry: Don't retry unchanged: fix the request first.
423 Locked
RFC 4918 (WebDAV)
The resource is locked.
Common causes
What to do: Wait for the lock to be released.
Retry: Don't retry unchanged: fix the request first.
424 Failed Dependency
RFC 4918 (WebDAV)
The request failed because another request it depended on failed.
Common causes
What to do: Fix the failed operation first.
Retry: Don't retry unchanged: fix the request first.
425 Too Early
RFC 8470
The server won't process a request sent as TLS early data (0-RTT), because it could be replayed.
Common causes
What to do: Clients retry after the handshake completes.
Retry: Retry after the TLS handshake completes.
426 Upgrade Required
RFC 9110
The server refuses this protocol; the Upgrade header names the one to use.
Common causes
- An endpoint that requires TLS or a newer HTTP version
What to do: Switch protocol as indicated.
Retry: Don't retry unchanged: fix the request first.
428 Precondition Required
RFC 6585
The server requires a conditional request (If-Match) to prevent lost updates.
Common causes
- APIs with mandatory optimistic locking
What to do: Send If-Match with the current ETag.
Retry: Don't retry unchanged: fix the request first.
429 Too Many Requests
RFC 6585APNs
Rate limited: too many requests in a given time. APNs returns it when one device token gets too many pushes.
Common causes
- API rate limits
- Bot protection
- Bursts from retries without backoff
What to do: Slow down, honour Retry-After, add jitter to retries and cache responses.
Retry: Wait for the Retry-After header (seconds or a date) before retrying; without one, back off exponentially.
From Apple's push service, the JSON body's reason says more: see APNs error codes.
431 Request Header Fields Too Large
RFC 6585
The headers, or one header, are too large.
Common causes
- Too many or too big cookies
- Huge Authorization tokens
What to do: Clear cookies for the site; trim tokens; raise server header limits.
Retry: Don't retry unchanged: fix the request first.
451 Unavailable For Legal Reasons
RFC 7725
Access is denied because of a legal demand, such as a court order or sanctions.
Common causes
- Geo-blocking for legal reasons
What to do: Nothing to fix technically.
Retry: Don't retry unchanged: fix the request first.
5xx server errors
The server failed to handle a valid request. Often temporary.
500 Internal Server Error
RFC 9110APNs
A generic server failure: the code crashed or hit an unhandled error.
Common causes
- Exceptions in application code
- Misconfiguration (.htaccess errors, missing environment variables)
- Database failures surfaced as errors
What to do: Check the server's error log for the stack trace; fix the bug or config.
Retry: Safe to retry idempotent requests (GET, PUT, DELETE) with exponential backoff; retry a POST only if it carries an idempotency key.
From Apple's push service, the JSON body's reason says more: see APNs error codes.
501 Not Implemented
RFC 9110Cacheable by default
The server doesn't support the functionality needed, such as an unknown method. Cacheable by default.
Common causes
What to do: Use a supported method.
Retry: Don't retry unchanged: fix the request first.
502 Bad Gateway
RFC 9110
A proxy or gateway got an invalid response from the upstream server.
Common causes
- The app server crashed or isn't running (nginx in front of PHP-FPM, Node or Gunicorn)
- Upstream closed the connection
- Response headers too big for the proxy
What to do: Check that the upstream process is up and listening on the right socket or port, and read the proxy's error log.
Retry: Safe to retry idempotent requests (GET, PUT, DELETE) with exponential backoff; retry a POST only if it carries an idempotency key.
503 Service Unavailable
RFC 9110APNs
The server is temporarily unable to handle the request: overloaded or in maintenance. Search engines treat a short 503 as temporary.
Common causes
- Maintenance mode
- Overload or exhausted worker pools
- Auto-scaling not caught up
What to do: Send Retry-After during maintenance; scale up or shed load.
Retry: Wait for the Retry-After header (seconds or a date) before retrying; without one, back off exponentially.
From Apple's push service, the JSON body's reason says more: see APNs error codes.
504 Gateway Timeout
RFC 9110
A proxy or gateway didn't get a response from upstream in time.
Common causes
- Slow database queries or external APIs
- Proxy timeouts shorter than the app's work
What to do: Speed up the slow call, move long work to a background job, or raise the proxy timeout.
Retry: Safe to retry idempotent requests (GET, PUT, DELETE) with exponential backoff; retry a POST only if it carries an idempotency key.
505 HTTP Version Not Supported
RFC 9110
The server doesn't support the HTTP version used.
Common causes
- Old servers and very new clients
What to do: Use HTTP/1.1.
Retry: Don't retry unchanged: fix the request first.
506 Variant Also Negotiates
RFC 2295
A content negotiation configuration error on the server.
Common causes
- Misconfigured transparent negotiation
What to do: Fix the server configuration.
Retry: Don't retry unchanged: fix the request first.
507 Insufficient Storage
RFC 4918 (WebDAV)
The server can't store what's needed to complete the request.
Common causes
What to do: Free space or raise the quota.
Retry: Wait for the Retry-After header (seconds or a date) before retrying; without one, back off exponentially.
508 Loop Detected
RFC 5842 (WebDAV)
The server found an infinite loop while processing. Some hosts also use it when an account hits its resource limits.
Common causes
- WebDAV binding loops; shared-hosting process limits
What to do: Fix the loop, or ask the host about resource limits.
Retry: Don't retry unchanged: fix the request first.
510 Not Extended
RFC 2774 (historic)
Further extensions to the request are required. The extension framework is obsolete.
Common causes
What to do: Nothing to fix.
Retry: Don't retry unchanged: fix the request first.
511 Network Authentication Required
RFC 6585
A captive portal (hotel or airport Wi-Fi) wants you to log in before you can use the network.
Common causes
What to do: Open any page in a browser and log in to the network.
Retry: Don't retry unchanged: fix the request first.
Cloudflare 520 to 530
Cloudflare shows these when the problem is between Cloudflare and your server (the origin), not between the visitor and Cloudflare. Testing the origin directly, for example with curl and a hosts-file entry or the origin's IP, separates the two.
520 Web Server Returns an Unknown Error
Unofficial: Cloudflare
Cloudflare got an empty, unknown or unexpected response from your origin server.
Common causes
- The origin crashed or reset the connection
- Response headers too large or malformed
- Empty replies from the application
What to do: Check the origin's logs at the time of the error; test the origin directly, bypassing Cloudflare; look for crashes and oversized headers or cookies.
Retry: Safe to retry idempotent requests (GET, PUT, DELETE) with exponential backoff; retry a POST only if it carries an idempotency key.
521 Web Server Is Down
Unofficial: Cloudflare
The origin refused Cloudflare's connection.
Common causes
- The web server isn't running
- A firewall or security plugin blocks Cloudflare's IP ranges
What to do: Start the web server; allow Cloudflare's published IP ranges in the firewall.
Retry: Safe to retry idempotent requests (GET, PUT, DELETE) with exponential backoff; retry a POST only if it carries an idempotency key.
522 Connection Timed Out
Unofficial: Cloudflare
Cloudflare couldn't complete a TCP connection to the origin in time.
Common causes
- An overloaded origin
- Firewall rules silently dropping Cloudflare's IPs
- A wrong origin IP in DNS
- Keep-alive disabled on the origin
What to do: Check the origin IP in Cloudflare DNS, allow Cloudflare's IP ranges, and check server load.
Retry: Safe to retry idempotent requests (GET, PUT, DELETE) with exponential backoff; retry a POST only if it carries an idempotency key.
523 Origin Is Unreachable
Unofficial: Cloudflare
Cloudflare can't route to the origin at all.
Common causes
- A wrong or changed origin IP
- Network routing problems at the host
What to do: Check the A/AAAA records in Cloudflare DNS against the server's IP; ask the host about routing.
Retry: Safe to retry idempotent requests (GET, PUT, DELETE) with exponential backoff; retry a POST only if it carries an idempotency key.
524 A Timeout Occurred
Unofficial: Cloudflare
Cloudflare connected to the origin, but the origin didn't send an HTTP response before the proxy read timeout (100 seconds by default).
Common causes
- Long-running requests: reports, imports, exports
- Slow database queries
What to do: Return quickly and finish long work in a background job (poll or use a webhook); Enterprise plans can raise the timeout.
Retry: Safe to retry idempotent requests (GET, PUT, DELETE) with exponential backoff; retry a POST only if it carries an idempotency key.
525 SSL Handshake Failed
Unofficial: Cloudflare
The TLS handshake between Cloudflare and the origin failed (SSL mode Full or Full strict).
Common causes
- No certificate installed on the origin
- The origin doesn't support SNI or the offered ciphers
- Port 443 closed on the origin
What to do: Install a certificate on the origin (a Cloudflare Origin CA certificate works) and check that port 443 answers TLS.
Retry: Safe to retry idempotent requests (GET, PUT, DELETE) with exponential backoff; retry a POST only if it carries an idempotency key.
526 Invalid SSL Certificate
Unofficial: Cloudflare
In Full (strict) mode, the origin's certificate couldn't be validated.
Common causes
- Expired or self-signed certificate
- Hostname not covered by the certificate
- Missing intermediate certificates
What to do: Renew or replace the origin certificate, or use a Cloudflare Origin CA certificate.
Retry: Don't retry unchanged: fix the request first.
527 Railgun Error
Unofficial: Cloudflare (retired)
A connection error with Cloudflare's Railgun service, which has been retired.
Common causes
What to do: Remove the Railgun configuration.
Retry: Don't retry unchanged: fix the request first.
530 Cloudflare 1xxx error
Unofficial: Cloudflare
Has no official name. Returned together with a Cloudflare 1xxx error, such as 1016 (origin DNS error) or 1033 (Cloudflare Tunnel error). The page shows the 1xxx number.
Common causes
- The origin hostname doesn't resolve
- A Cloudflare Tunnel isn't connected
What to do: Look up the 1xxx error shown on the page; fix the DNS record or restart the tunnel.
Retry: Safe to retry idempotent requests (GET, PUT, DELETE) with exponential backoff; retry a POST only if it carries an idempotency key.
Other unofficial codes
Servers, frameworks and load balancers that invented their own numbers. Some, like nginx's 499, appear only in logs and are never sent to clients.
419 Page Expired
Unofficial: Laravel
Laravel returns it when the CSRF token in a form is missing or expired.
Common causes
- A form left open past the session lifetime
- Missing @csrf in the form
What to do: Reload the form; include the CSRF token; check session and cookie settings.
Retry: Don't retry unchanged: fix the request first.
420 Enhance Your Calm
Unofficial: old Twitter API
Twitter's original API returned it for rate limiting before 429 existed.
Common causes
What to do: Treat it like 429.
Retry: Wait for the Retry-After header (seconds or a date) before retrying; without one, back off exponentially.
440 Login Time-out
Unofficial: Microsoft IIS
The client's session expired and it must log in again.
Common causes
- Expired IIS or Exchange sessions
What to do: Log in again.
Retry: Don't retry unchanged: fix the request first.
444 No Response
Unofficial: nginx
Used in nginx configuration to close the connection without sending anything. Clients see an empty reply, not the number.
Common causes
- return 444 rules that drop unwanted requests or bots
What to do: Check the nginx server blocks for return 444.
Retry: Don't retry unchanged: fix the request first.
449 Retry With
Unofficial: Microsoft IIS
The request should be retried after performing the indicated action.
Common causes
What to do: Follow the server's instructions.
Retry: Don't retry unchanged: fix the request first.
450 Blocked by Windows Parental Controls
Unofficial: Microsoft
Windows parental controls blocked the page.
Common causes
What to do: Change the parental control settings.
Retry: Don't retry unchanged: fix the request first.
460 Client closed connection
Unofficial: AWS Elastic Load Balancing
The client closed the connection before the load balancer's idle timeout ended.
Common causes
- Client-side timeouts shorter than the backend's work
What to do: Raise the client timeout or speed up the backend.
463 Too many forwarded IPs
Unofficial: AWS Elastic Load Balancing
The load balancer got an X-Forwarded-For header with too many IP addresses (more than 30).
Common causes
- Proxy loops that keep appending addresses
What to do: Fix the proxy chain.
Retry: Don't retry unchanged: fix the request first.
494 Request header too large
Unofficial: nginx
nginx's internal code for headers over its limit; it answers 400 to the client.
Common causes
What to do: Raise large_client_header_buffers or trim cookies.
Retry: Don't retry unchanged: fix the request first.
495 SSL Certificate Error
Unofficial: nginx
The client certificate was invalid (mutual TLS); sent to the client as 400.
Common causes
- mTLS with a bad client certificate
What to do: Fix the client certificate.
Retry: Don't retry unchanged: fix the request first.
496 SSL Certificate Required
Unofficial: nginx
A client certificate was required but not sent; sent to the client as 400.
Common causes
- mTLS without a client certificate
What to do: Send the client certificate.
Retry: Don't retry unchanged: fix the request first.
497 HTTP Request Sent to HTTPS Port
Unofficial: nginx
Plain HTTP arrived on a port that expects TLS; sent to the client as 400.
Common causes
- http:// to an https-only port
What to do: Use https://, or redirect with error_page 497.
Retry: Don't retry unchanged: fix the request first.
499 Client Closed Request
Unofficial: nginx
Logged by nginx when the client closed the connection before the response was ready. The client never sees it.
Common causes
- Users leaving the page
- Client or load-balancer timeouts shorter than the backend's work
What to do: If frequent, speed up slow endpoints or align timeouts along the chain.
509 Bandwidth Limit Exceeded
Unofficial: cPanel and Apache modules
The hosting account exceeded its bandwidth allowance.
Common causes
What to do: Upgrade the plan or reduce traffic (images, a CDN).
Retry: Don't retry unchanged: fix the request first.
561 Unauthorized
Unofficial: AWS Elastic Load Balancing
The load balancer's authentication action (OIDC or Cognito) failed.
Common causes
What to do: Check the listener's authentication settings and the identity provider.
Retry: Don't retry unchanged: fix the request first.
598 Network read timeout
Unofficial: some proxies
Some HTTP proxies use it for a read timeout behind them.
Common causes
What to do: Check the upstream.
Retry: Safe to retry idempotent requests (GET, PUT, DELETE) with exponential backoff; retry a POST only if it carries an idempotency key.
599 Network connect timeout
Unofficial: some proxies
Some HTTP proxies use it for a connect timeout behind them.
Common causes
What to do: Check the upstream.
Retry: Safe to retry idempotent requests (GET, PUT, DELETE) with exponential backoff; retry a POST only if it carries an idempotency key.