505 Error Code: Meaning, Causes & How to Fix It (2026)
HTTP 505 — HTTP Version Not Supported
⚡ Key Takeaways
- HTTP 505 means the server cannot process the request because it does not support the HTTP version the client used.
- It is a server-side 5xx error, but the root cause is often on the client side — an outdated browser, misconfigured scraper, or proxy that downgrades the HTTP version.
- 505 is distinct from other 5xx errors: it signals a specific protocol version mismatch, not a general server malfunction.
- For web scrapers and automation tools, 505 errors are frequently caused by libraries defaulting to HTTP/1.0 when the target server requires HTTP/1.1 or HTTP/2.
- Fixing it almost always means either upgrading the client's HTTP version or adjusting how an intermediary (proxy, load balancer) handles protocol negotiation.
Most HTTP error codes are immediately self-explanatory — a 404 means the page is gone, a 403 means access denied. The 505 is less obvious. It does not mean the server is down. It does not mean your request was wrong. It means the server and the client are attempting to communicate in incompatible versions of the HTTP protocol — and the server is refusing to proceed rather than risk a broken exchange.
For regular users in modern browsers, a 505 is rare to the point of being unusual. For developers running web scrapers, automation pipelines, or API clients with older HTTP libraries, it is a specific and fixable configuration error. This guide explains exactly what triggers it, how it differs from similar 5xx codes, and the complete set of fixes — ordered by cause and audience.
What Is the 505 Error Code?
The HTTP 505 status code means: "HTTP Version Not Supported." It is defined in RFC 7231 Section 6.6.6 as a server error returned when the server does not support, or refuses to support, the major HTTP protocol version used in the client's request.
Every HTTP request begins with a request line that specifies the HTTP version being used — for example:
GET /page HTTP/1.1 Host: example.com
If that version string is one the server does not accept — whether too old (HTTP/1.0) or improperly formed — the server returns 505 and closes the connection without processing the request. As MDN Web Docs notes, this commonly happens when a request line is malformed — for example, spaces in a URL causing GET /path to resource HTTP/1.1 to be parsed incorrectly — or when a load balancer mishandles percent-encoded URLs and the origin server receives garbled version information.
HTTP Version History: Why Version Mismatches Happen
The HTTP protocol has evolved through four major versions, each with different capabilities and compatibility requirements. Understanding the version landscape explains why 505 errors occur more often in automated tools than in browsers:
| HTTP Version | Year | Key Feature | Current Status |
|---|---|---|---|
| HTTP/1.0 | 1996 | One request per connection, no persistent connections | Largely deprecated — many servers reject it |
| HTTP/1.1 | 1997 | Persistent connections, chunked transfer encoding | Universal baseline — all servers support it |
| HTTP/2 | 2015 | Multiplexing, header compression, binary framing | Widely adopted — standard on most modern sites |
| HTTP/3 | 2022 | QUIC-based, UDP transport, reduced latency | Growing adoption — ~30% of top sites as of 2026 |
Adoption figures per W3Techs HTTP/3 usage statistics.
Modern browsers automatically negotiate the highest mutually supported HTTP version with every server — Chrome, Firefox, Safari, and Edge all handle this transparently. The 505 appears when a client — typically a scraper, legacy application, or misconfigured proxy — hardcodes or defaults to an HTTP version the target server does not accept.
505 vs. Other 5xx Error Codes
| Error Code | Name | Root Cause | Key Difference from 505 |
|---|---|---|---|
| 500 | Internal Server Error | Unspecified server-side failure | 500 is generic — no specific cause named. 505 identifies protocol mismatch precisely. |
| 501 | Not Implemented | Server does not support the HTTP method used (e.g., PATCH) | 501 is about an unsupported method; 505 is about an unsupported protocol version. |
| 502 | Bad Gateway | Upstream server returned an invalid response to a gateway | 502 is a communication failure between servers; 505 is a protocol negotiation failure. |
| 503 | Service Unavailable | Server temporarily overloaded or down for maintenance | 503 is a capacity/availability issue; 505 is a permanent protocol incompatibility. |
| 504 | Gateway Timeout | Gateway did not receive a timely response from upstream | 504 is a timeout; 505 is a version rejection — the server responded, but refused. |
| 426 | Upgrade Required | Server requires the client to upgrade to a different protocol | 426 is the closest relative — also about protocol version, but requests an upgrade rather than simply refusing. |
Status code definitions: Abstract API HTTP 505 reference; MDN Web Docs RFC 7231.
6 Root Causes of the 505 Error
📜 Outdated HTTP Library or Client
Scraping scripts using old versions of Python's urllib, legacy curl builds, or old HTTP clients may default to HTTP/1.0 for requests. Servers that have dropped HTTP/1.0 support return 505 immediately.
🔧 Proxy Downgrading the HTTP Version
A proxy in the request path — including a SOCKS5 or HTTP proxy — may strip HTTP/2 negotiation headers or rewrite the request line to HTTP/1.1 or HTTP/1.0 before forwarding. The target server then receives a version it does not support.
⚖️ Load Balancer Misconfiguration
Misconfigured load balancers — especially those that do not properly handle percent-encoded URLs — can corrupt the request line, causing the server to receive garbled version information. MDN specifically documents this as a common 505 trigger.
🖥️ Outdated Server Software
A server running an old version of Apache, NGINX, or IIS may not support HTTP/2 or HTTP/3 even when the client requests it. Equally, some heavily locked-down servers drop HTTP/1.0 support and only accept HTTP/1.1 and above.
🛡️ Firewall or Security Filter
Web Application Firewalls (WAF) and aggressive network firewalls can modify or strip protocol negotiation headers, causing version mismatches that neither the client nor the origin server intended.
🤖 Anti-Bot Version Enforcement
Some servers deliberately return 505 in response to bot-like request patterns — returning this error instead of 403 to obscure their detection logic. Scrapers sending HTTP/1.0 or missing standard HTTP/1.1 headers are common triggers. As IPRoyal notes, server software may intentionally block certain automated requests this way.
3 Real-World Scenarios Where 505 Errors Occur
Python Scraper with Outdated Library
A data engineer runs a scraping script using Python's urllib without specifying an HTTP version. The library defaults to HTTP/1.0 for some request types. The target e-commerce site, running NGINX configured to reject HTTP/1.0, returns 505. Fix: switch to requests or httpx with HTTP/2 support, or explicitly set HTTP/1.1 headers.
Load Balancer with Unencoded URL
A client requests GET /search?q=proxy server HTTP/1.1 — a URL with an unencoded space. The load balancer splits the request line at the space, forwarding GET /search?q=proxy and treating server as the HTTP version string. The origin server receives an unknown version and returns 505. Fix: percent-encode URLs before requesting (/search?q=proxy%20server), or configure the load balancer to handle URL encoding correctly.
SOCKS5 Proxy Downgrading HTTP/2
A developer routes an HTTP/2-capable scraper through a SOCKS5 proxy. The proxy configuration strips ALPN (Application-Layer Protocol Negotiation) headers that enable HTTP/2 negotiation, causing the connection to fall back to HTTP/1.0. A server that has disabled HTTP/1.0 returns 505. Fix: configure the proxy to pass ALPN headers through, or use an HTTP proxy that explicitly supports HTTP/2 forwarding.
How to Fix a 505 Error: Complete Checklist
The correct fix depends on whether you are a browser user, a developer, or a server administrator. Work through the section that applies to your context.
For Browser Users
1. Update Your Browser
Outdated browsers are the most common client-side cause. Open browser settings and check for updates. Chrome, Firefox, Edge, and Safari all auto-update — confirm the update is applied and restart.
2. Clear Browser Cache and Cookies
Corrupted cached data can conflict with protocol negotiation. Clear cache and cookies (Chrome: Settings → Privacy → Clear browsing data), then reload the page. This resolves 505 errors caused by stale protocol state cached from a previous session.
3. Test in a Different Browser
If the error appears in one browser but not another, the issue is browser-specific — a corrupt installation, extension conflict, or outdated configuration. Try Chrome, Firefox, and Edge to isolate.
4. Disable Browser Extensions
Some extensions — particularly privacy tools, ad blockers, and VPN extensions — modify HTTP request headers or intercept protocol negotiation in ways that trigger 505. Disable all extensions, reload, and re-enable one by one to identify the cause.
For Developers & Web Scrapers
5. Upgrade Your HTTP Library
Replace urllib with requests (HTTP/1.1) or httpx (HTTP/1.1 + HTTP/2). Verify the version your library sends by checking the request line in server logs or using a proxy interceptor like mitmproxy. For httpx with HTTP/2: pip install httpx[http2] then client = httpx.Client(http2=True).
6. Explicitly Set the HTTP Version
Some libraries let you force a specific version. With curl: use --http1.1 or --http2 flags. With Python requests, HTTP version is handled automatically — if you are still seeing 505, the issue is likely in an intermediary (proxy or load balancer), not the library itself.
7. Percent-Encode URLs Before Requesting
Never include spaces or special characters in URLs. Use Python's urllib.parse.quote() or JavaScript's encodeURIComponent() to encode query parameters. Unencoded URLs are a documented trigger for 505 from load balancers that split on spaces.
8. Check Proxy Configuration for HTTP/2 Compatibility
If requests route through a proxy, verify it supports HTTP/2 forwarding. Many older proxy configurations strip ALPN headers — the mechanism browsers use to negotiate HTTP/2 during TLS handshake. Test by bypassing the proxy temporarily to confirm whether it is the source of the downgrade. For residential proxies used in scraping, confirm the provider explicitly supports HTTP/2 passthrough.
For Server Administrators
9. Update Server Software
Ensure NGINX, Apache, or your web server is running a current version with HTTP/1.1, HTTP/2, and (optionally) HTTP/3 enabled. For NGINX: confirm listen 443 ssl http2; is present. For Apache: ensure mod_http2 is loaded and Protocols h2 http/1.1 is configured in the virtualhost.
10. Verify Load Balancer URL Handling
Check that your load balancer properly handles percent-encoded URLs without splitting request lines on decoded characters. In AWS ALB/NLB, review access logs for malformed request line entries. In NGINX used as a load balancer, confirm proxy_pass is configured to preserve the original request URI.
11. Review WAF and Firewall Rules
If a Web Application Firewall is in the request path, check whether any rules are modifying protocol version headers or triggering 505 responses for specific request patterns. In Cloudflare, check Firewall → Events for 505-related rule matches. Review custom WAF rules for any HTTP version filtering logic.
505 Error and Web Scraping: The Proxy Angle
For developers running web scraping pipelines through proxy infrastructure, the 505 is one of the most preventable proxy-related errors. It typically surfaces when:
- A proxy server downgrades HTTP/2 requests to HTTP/1.0 before forwarding — the target server sees an unsupported version.
- A proxy's SSL/TLS termination strips ALPN negotiation, preventing HTTP/2 from being established between the proxy and origin.
- The scraping library and the proxy use different default HTTP versions, creating a mismatch in the protocol negotiation chain.
The fix at the proxy layer is to use a provider that explicitly supports HTTP/2 forwarding and passes ALPN headers through intact. Nstproxy's residential and ISP proxies support full HTTP/2 passthrough across all proxy types — meaning the HTTP version your scraping client negotiates is preserved end-to-end without downgrade. This eliminates the most common proxy-caused 505 trigger in scraping pipelines.
For data collection teams encountering persistent 505 responses from a specific target site, it is worth testing whether the site is using 505 as an anti-bot measure rather than a genuine protocol error — a behaviour documented by IPRoyal. In that case, switching from a datacenter IP to a residential IP from Nstproxy's residential proxy network often resolves the issue by removing the bot signal that was triggering the error. See the high-anonymity proxy guide for technical detail on request header configuration.
Eliminate Proxy-Caused 505 Errors with Nstproxy
HTTP/2-compatible residential proxies with full ALPN passthrough, elite header configuration, and 110M+ clean IPs. No protocol downgrades, no bot detection triggers — from $0.4/GB.
Conclusion
The HTTP 505 error is a specific, diagnosable protocol-version mismatch — not a generic server failure. The server is telling you precisely what went wrong: the HTTP version in your request is one it does not support. The fix is almost always one of three things: update the client to use a supported HTTP version, fix a URL encoding issue that is corrupting the request line, or address an intermediary (proxy or load balancer) that is downgrading the protocol version before the request reaches the origin server.
For browser users, updating the browser resolves it in nearly every case. For developers, upgrading HTTP libraries to requests or httpx and ensuring proper URL encoding eliminates the most common triggers. For server administrators, keeping web server software current and verifying load balancer URL handling covers the server-side causes. And for scraping pipelines, choosing proxy infrastructure that explicitly supports HTTP/2 forwarding removes the proxy-layer cause entirely.
Frequently Asked Questions
HTTP 505 means "HTTP Version Not Supported." The server received a request that specified an HTTP version it does not support — typically HTTP/1.0 when the server requires HTTP/1.1 or higher, or a malformed request line caused by an unencoded URL or misconfigured intermediary. It is a server-side 5xx status code but is usually caused by a client-side or intermediary configuration issue.
505 is classified as a server error (5xx range), because the server is returning the response. However, the root cause is usually a mismatch initiated by the client or an intermediary — an outdated HTTP library, a malformed URL, or a proxy that downgrades the protocol version. The server is working correctly; it is simply refusing to process a request with an unsupported protocol version.
A 502 Bad Gateway means a proxy or gateway received an invalid or unexpected response from an upstream server — it is a communication failure between servers. A 505 is a protocol version rejection — the server received a request it understood but refused because the HTTP version is unsupported. Both can involve proxies, but 502 is about a failed server-to-server communication, while 505 is about a client-to-server protocol incompatibility.
Yes. Search engine crawlers (Googlebot, Bingbot) make HTTP requests to your pages. If they encounter 505 responses, they cannot index those pages — removing them from search results. Persistent 505 errors on a site reduce crawl budget efficiency, increase bounce rates from users encountering the error, and can degrade link equity from URLs returning 505 instead of valid content. Fixing 505 errors promptly is an SEO hygiene requirement for any indexed page.
Modern browsers automatically negotiate the highest mutually supported HTTP version with every server and update continuously in the background. Web scrapers and automation tools often use specific library versions with fixed default HTTP versions, do not handle ALPN negotiation for HTTP/2, and may route through proxies that alter protocol headers. Each of these creates an opportunity for a version mismatch that never occurs with a regularly updated browser.

