HTTP Status Codes
What is a 300 redirect?
A 300 redirect is an HTTP status code that indicates a requested resource has more than one possible location, and the client (typically a browser) must choose which one to use. It belongs to the 3xx redirect class of status codes, which all deal with directing requests from one URL to another.
Unlike a 301 redirect or 302 redirect, which send the visitor to a single definitive destination automatically, a 300 presents multiple options and leaves the choice to the browser or the user.
How a 300 redirect works
When a server responds with a 300 status code, it includes a list of alternative URLs in the response body, each representing a different version or format of the requested resource. The server may also include a Location header suggesting a preferred option, but following it is not required.
In practice, most browsers do not handle 300 responses with any special UI, they either follow the preferred Location header automatically or display the raw response. This inconsistent browser behaviour is one of the main reasons 300 is rarely used in real-world web development.
300 vs 301 and 302
The 300 status code is easy to confuse with its neighbours but serves a fundamentally different purpose.
A 301 redirect is a permanent redirect, one URL has moved to one new URL, forever. A 302 redirect is a temporary redirect, one URL is pointing to one other URL for now. Both are unambiguous single-destination redirects that browsers handle automatically and consistently.
A 300 by contrast is a multiple-choice response. There is no single destination, the server is saying “this content exists in several forms, pick one.” Because browsers never standardised how to handle this, it never gained traction as a practical tool.
When is a 300 redirect actually used?
Almost never in standard web development. It was designed for content negotiation, scenarios where the same resource exists in multiple formats, languages, or encodings, and the server wants to offer the client a choice. For example, a video file available in multiple formats or a document available in multiple languages.
In modern web development these problems are solved better by other means, HTTP content negotiation headers like Accept and Accept-Language, or dedicated language-based redirects handled server-side. The 300 status code largely remains a theoretical part of the HTTP specification that you will encounter in documentation far more than in production systems.
Should you use a 300 redirect?
For the vast majority of use cases the answer is no. If you are moving a page permanently, use a 301. If you are moving it temporarily, use a 302. If you need to handle language or regional variants, use a geo redirect or a language-based redirect instead.
The 300 status code is worth understanding as part of the broader HTTP status code family, but it is not something you will need to implement in practice.