
As an example, a 300 code could present to the client multiple image or video formats that are available for the client to request, or show a list of files with different file names.
HTTP 300, known as "Multiple Choices," means the requested resource has more than one available representation and the client must choose which one to use. The server presents a list of options—such as different file formats, languages, or versions—and waits for the client or user to select one. It is classified as a 3xx redirection response.
A server returns a 300 when a single URL maps to multiple representations of a resource, for example different media formats, file variants with different names, or content in multiple languages. The server uses it to signal that automatic resolution is not possible and the client must actively pick an option before the request can proceed.
HTTP 301 and 302 are automatic redirects—the server has already decided where the client should go and sends it there without user input. HTTP 300 is different because there is no single determined destination; the server offers multiple choices and may require the user or user agent to make the selection. This is why 300 can require user intervention while 301 and 302 do not.
A 300 response can optionally include a Location header if the server has a preferred choice it wants the client to follow. When a Location header is present, some user agents will automatically follow it, but this behavior is not guaranteed and varies across browsers and HTTP clients. The body of the response should also contain a list of the available options in a format the client can parse.
HTTP 300 is seldom used in modern web applications because content negotiation is typically handled automatically between the server and client using request headers such as Accept and Accept-Language. Servers generally resolve the best representation themselves and respond directly, removing the need to ask the client to choose. As a result, 300 remains one of the least commonly encountered HTTP status codes.
When your application receives a 300 response, check the response body for the list of available resource representations and, if present, the Location header for the server's preferred option. Your code should either automatically follow the preferred location or present the choices to the user. Because browser and client behavior around 300 is inconsistent, explicit handling in your application code is more reliable than relying on automatic resolution.