devkult_
tools29converters34

300 Multiple Choices

3xx redirection

The resource has several representations and the client should pick one.

300 is the rarely used 'there are options' redirect. The server lists alternatives — different formats or languages — and may suggest a preferred one in the Location header. Content negotiation through Accept headers replaced it in practice, so mainstream servers almost never send it.

Class3xx Redirection
Retry?Not applicable
Cacheable by defaultYes (heuristically, per RFC 9110)
Response bodyAllowed
Defined inRFC 9110 §15.4.1 — 300 Multiple Choices
Example response
HTTP/1.1 300 Multiple Choices
Location: /docs/en

When you'll see it

  • Servers with agent-driven content negotiation enabled.
  • Hand-built APIs that list alternative representations.

How to use it well

  1. Prefer server-driven negotiation (Accept, Accept-Language) and a direct 200.
  2. If you do use 300, include a Location for the preferred choice so browsers can follow it automatically.

Send a 300 from your server

Express
res.redirect(300, "/docs/en");
Next.js route handler
return NextResponse.redirect(new URL("/docs/en", request.url), 300);
Flask
return redirect("/docs/en", code=300)
Go net/http
http.Redirect(w, r, "/docs/en", http.StatusMultipleChoices)
nginx
return 300 /docs/en;

Check what a URL returns

Print just the status line from the command line, or check a whole list of URLs at once, with their response headers, in the HTTP Status Checker.

curl -sI https://example.com/your-path | head -n 1

Frequently asked questions

Do browsers follow a 300 automatically?

Only when a Location header is present. Otherwise they show the response body, which should list the choices as links.

Headers used with 300
Related status codes