DevToolsmith

HTTP 300 Multiple Choices

HTTP 300 Multiple Choices means the resource has several representations and the client should pick one. The client must take further action, usually following a redirect.

Class
3xx Redirection
Standard
RFC 9110
Cacheable by default
Yes
Safe to retry
Not applicable: this isn’t an error
Go constant
http.StatusMultipleChoices

What HTTP 300 means

Intended for content negotiation, such as one document in several languages or formats. Browsers don’t choose automatically, so it is almost never used. Servers usually pick a representation themselves based on Accept headers.

Retrying

Not applicable: this isn’t an error.

Example response

HTTP/1.1 300 Multiple Choices
Date: Wed, 21 Oct 2026 10:30:00 GMT

How to return 300

Node.js (Express)
res.redirect(300, '/new-path');
Python (FastAPI)
from fastapi.responses import RedirectResponse

return RedirectResponse("/new-path", status_code=300)
Go (net/http)
http.Redirect(w, r, "/new-path", http.StatusMultipleChoices)
nginx
location /old-path {
    return 300 /new-path;
}

Related status codes

Other 3xx status codes

301 Moved Permanently · 302 Found · 303 See Other · 304 Not Modified · 307 Temporary Redirect · 308 Permanent Redirect

See the full list of HTTP status codes.

Sources

Spotted a mistake? Email hello@devtoolsmith.com and we’ll fix it.

Frequently asked questions

What does HTTP 300 Multiple Choices mean?

HTTP 300 Multiple Choices means the resource has several representations and the client should pick one. Intended for content negotiation, such as one document in several languages or formats. Browsers don’t choose automatically, so it is almost never used. Servers usually pick a representation themselves based on Accept headers.