Runs in your browser. Your files and text never leave your device - nothing is uploaded.
3xx Redirection
What it means
The request has more than one possible response; the client should choose one.
| Property | Detail |
|---|---|
| Status class | 3xx Redirection |
| Defined in | RFC 9110, Section 15.4.1 |
| Cacheable by default | Yes. RFC 9110 lists it as heuristically cacheable, so a cache may reuse it without explicit freshness headers unless Cache-Control says otherwise. |
| Who needs to act | The client, or the person reading the page, who has to choose an option. |
What does HTTP 300 Multiple Choices mean?
HTTP 300 Multiple Choices means the requested resource has more than one representation, such as different languages or file formats, and the client should pick one. The server lists the options in the body and may name a preferred one in the Location header. Browsers do not follow it automatically, so it is rarely used.
How 300 Multiple Choices works
A 300 is HTTP's mechanism for reactive negotiation: instead of choosing a version for the client from its Accept headers, the server hands the decision back. RFC 9110 says the body should list each alternative with its own URL, and that the server should add a Location header if it has a preference. HTTP never standardised a format for that list, though. RFC 9110 notes that the alternatives could be sent as a Link header with the alternate relation, but calls deployment of that a chicken-and-egg problem. On top of that, the Fetch standard that browsers follow only treats 301, 302, 303, 307 and 308 as redirects. The result is that a browser shows the 300 page and leaves the choice to the reader. Almost every site negotiates on the server side instead.
Example 300 request and response
GET /docs/report HTTP/1.1
Host: example.com
HTTP/1.1 300 Multiple Choices
Location: /docs/report.pdf
Content-Type: text/html
(HTML list: report.pdf, report.html, report.docx)Location names the server's preferred choice; the body lists every alternative for a person to pick from.
When servers send 300 Multiple Choices
- Apache's content negotiation (mod_negotiation), which can return 300 when several variants are equally good matches; ForceLanguagePriority exists to avoid it.
- Document archives offering the same item in several formats.
- Occasionally, APIs that list alternative versions of a resource.
How to handle 300 Multiple Choices
If you hit a 300
- Read the list in the response body and request the specific URL you want.
- If you control the client code, follow Location when it is present.
If you run the server
- Prefer server-driven negotiation with Accept and Accept-Language, plus a Vary header, so clients get a single answer.
- With Apache MultiViews, set ForceLanguagePriority Prefer so a default is served instead of a 300.
- For a single moved page, use 301 or 302, which every browser follows.
Related status codes
- 406 Not Acceptable: Negotiation failed outright: no representation matches what the client accepts.
- 301 Moved Permanently: A single permanent destination, which clients follow automatically.
- 302 Found: A single temporary destination.
Frequently asked questions
The request has more than one possible response; the client should choose one.
Rarely used in practice - some servers use it for content negotiation with multiple representations.
Check the response body for a list of available options and choose the appropriate one.
No. Browsers automatically follow only 301, 302, 303, 307 and 308, as defined by the Fetch standard. A 300 response is displayed like an ordinary page, so the user has to pick a link from the list.
Sources
Other 3xx Redirection codes
Reviewed by Raja Jahangir · Last reviewed: October 7, 2026
