Utilo

HTTP 505 HTTP Version Not Supported – Free, Online, Private

505 HTTP Version Not Supported means the server refuses the HTTP major version in the request.

What HTTP 505 means

505 says the server does not support, or refuses to support, the major HTTP version in the request line. A request that arrives as a version the server will not speak gets 505 rather than a confused parse. It is uncommon on the modern web, where version negotiation happens in TLS or in the connection preface. You still see it when a client sends a version token a front server rejects.

505 HTTP Version Not Supported belongs to the 5xx server error class. Clients that only look at the class will group it with its neighbors. Clients that care about the exact code should use the narrower rule on this page, because the class is only the first digit.

When you see HTTP 505

When you see HTTP 505 HTTP Version Not Supported, stop on that exact status line. 505 HTTP Version Not Supported means the server refuses the HTTP major version in the request. The trace that usually produces it: A client sent a version token the server is configured to reject. The 5xx server error class only tells you the first digit. A neighbor in that class is a different fault, and the fix on this page does not transfer to it.

Return 505 when you are refusing the HTTP version itself. Use 426 if you want the client to switch protocols and you are naming the upgrade. Use 400 if the request line is simply garbage. Do not return 505 for an unsupported feature of a version you do speak.

How to fix HTTP 505

To fix HTTP 505, change the condition that made the server choose HTTP Version Not Supported. Retry only with a supported HTTP version. Do not tight-loop. If your stack hides the version, this error means the stack and the server do not overlap. Only after changing the version. The same version fails. If the log line is a different code, leave this page. The mix-up people make with 505 is this one: 426 asks for an upgrade and names it. 400 is a malformed request. 505 is specifically the version.

  • A test sent HTTP/0.9 or a future major version.
  • A proxy translated the version and the origin's 505 described the proxy's translation, not the client's request.
  • The client retried the same version and received the same refusal.

An access log that only stores 505 is not enough to tell these apart. Keep the method, the path, and a request id. Do not keep the Authorization header or a request body that might be a token. The status explains the outcome. It is not a place to echo secrets back to the client either.

Example response

HTTP 505 HTTP Version Not SupportedHTTP/1.1 505 HTTP Version Not Supported
Content-Type: text/plain

HTTP version not supported.

The body can name the versions you do support. The client has to speak one of them. There is no Retry-After, because time will not change the version. If you can answer the request in a version you both speak, do that instead of failing.

What the client should do

Retry only with a supported HTTP version. Do not tight-loop. If your stack hides the version, this error means the stack and the server do not overlap.

Do not cache 505 as the resource. It is about the request line.

Only after changing the version. The same version fails.

Codes people confuse with HTTP 505

426 asks for an upgrade and names it. 400 is a malformed request. 505 is specifically the version.

Frequently asked questions

When does 505 actually occur?

When a server refuses the major version in the request. Everyday browsers rarely provoke it.

Is it an unsupported header?

No. An unsupported feature of a version you speak is not 505.

What should the client change?

The HTTP version, to one the server supports.

How is 426 different?

426 names a protocol the client should switch to. 505 rejects the version that was used.

What should I do first when I see HTTP 505?

Read the status as 505 HTTP Version Not Supported specifically. 505 HTTP Version Not Supported means the server refuses the HTTP major version in the request. Then check the cause that matches the request you sent, starting with: A client sent a version token the server is configured to reject.