{ }HttpStatus.com

306 (Unused)

Reserved: this status code is no longer used and is reserved for historical reasons.

Defined in RFC 9110 §15.4.7 · deprecated / reserved

What 306 means

306 has no current meaning. It was originally used in early drafts and implementations of HTTP/1.1 with the reason phrase "Switch Proxy," intended to instruct a client that subsequent requests should be routed through a specified proxy, a concept closely related to what later became the 305 status. It was removed from the specification before HTTP/1.1 was finalized and has not been assigned any meaning since.

The code number is formally reserved rather than freed for reuse, precisely because its history as "Switch Proxy" is still referenced in some older client and server implementations, and reassigning it to a new meaning could cause unpredictable behavior in software that has hardcoded assumptions about it. RFC 9110 lists it explicitly as unused and reserved, alongside a short historical note rather than any operational semantics.

In practice, no compliant client or server should ever generate or expect to receive a 306 response. If it appears in logs, request traces, or third-party integrations, it almost always indicates a bug, a malformed proxy or middleware implementation, or a deliberately synthetic test value, since there is no legitimate HTTP/1.1 or later use case that calls for it.

Because it carries no defined semantics, there is nothing meaningful for a client to do upon receiving 306 beyond treating it as an unexpected or erroneous response and logging it for investigation, rather than attempting to interpret it as any kind of redirect.

Common causes

  • A legacy client or proxy implementation still references the old, pre-standardization "Switch Proxy" behavior.
  • A malformed or buggy server emits 306 due to an internal status-code mapping error.
  • Test harnesses or fuzzers deliberately send 306 to verify how a client handles unrecognized status codes.
  • Third-party middleware misuses the reserved code number for an unrelated internal signal.

How to fix a 306

If you are the client (browser user or API caller)

  • Treat 306 as an unexpected response; do not attempt to interpret it as a redirect or follow any Location header.
  • Log occurrences of 306 for investigation rather than silently ignoring them, since a well-behaved server should never send it.
  • Fall back to generic error handling for unrecognized 3xx codes if your client encounters 306.

If you run the server

  • Remove any code path capable of emitting 306; it is reserved and must not be used.
  • Audit legacy proxy or gateway software for lingering references to the historical "Switch Proxy" behavior and remove them.
  • If your framework maps arbitrary integers to status codes, add a guard against emitting 306 accidentally.

Example

GET /resource HTTP/1.1
Host: legacy.example.com

HTTP/1.1 306 (Unused)
Reserved status code with no defined semantics; should never appear from a compliant server.

Try it live

Our free status responder returns a real HTTP 306 you can point tests, monitors or a browser at.

GET https://mcp.httpstatus.com/status/306

Related status codes

Tools for debugging this