HTTP 300 Multiple Choices indicates there are multiple representations of the requested resource, and the user or user agent can select a preferred one. The server may indicate a preferred choice via the Location header. This is rarely used in practice — content negotiation (Accept headers) handles most cases where multiple representations exist. The most common scenario is when a resource exists in multiple formats (HTML, JSON, PDF) and the server cannot determine which one the client wants.
Response includes the status code, standard headers (including Content-Type), and a small diagnostic JSON body describing the request and returned status.
Simulator URL (copy in the app after load — not a normal link):
https://httpstatus.com/api/status/300
Example request:
curl -i "https://httpstatus.com/api/status/300"The request has more than one possible representation. The client should choose one (rarely used in practice).
On this code, Inspector focuses on semantics, headers, and correctness warnings that commonly affect clients and caches.
300 Multiple Choices (RFC 7231 Section 6.4.1) is the only 3xx status that doesn't redirect to a single target. The response body SHOULD contain a list of resource URIs and metadata so the user can choose. If the server has a preferred representation, it SHOULD include a Location header. Browsers typically follow the Location header automatically, making 300 behave like a redirect in practice. Content negotiation via Accept headers (proactive negotiation) has largely replaced 300 (reactive negotiation). The HTML spec suggests using a <select> element for user choice, but this was never widely implemented.
app.get('/old-path', (req, res) => {
res.redirect(300, '/new-path');
});from fastapi.responses import RedirectResponse
@app.get('/old-path')
async def old_path():
return RedirectResponse('/new-path', status_code=300)@GetMapping("/old-path")
public ResponseEntity<Void> oldPath() {
return ResponseEntity.status(300)
.header("Location", "/new-path")
.build();
}func oldPathHandler(w http.ResponseWriter, r *http.Request) {
http.Redirect(w, r, "/new-path", 300)
}