3xx HTTP Status Codes
3xx status codes tell the client to take another action to complete the request.
This is an educational guide. The pages linked here are documentation pages served as 200 OK, even when the HTTP status code being explained is an error response.
What 3xx means
Redirection responses tell the client that another request is needed to complete the operation. The Location header usually identifies the target URL.
Where 3xx responses appear
- A page or API endpoint moved to a new URL.
- A browser should fetch another URL after a form submission.
- A cached copy is still valid and the server does not need to resend it.
- A service needs to preserve or change the original request method during 3xx handling.
Implementation notes
- Use 301 or 308 for permanent moves and 302 or 307 for temporary moves.
- Use 303 after form submissions when the follow-up request should be GET.
- Use 307 or 308 when the client must preserve the original request method and body.
All 3xx status codes
| Code | Name | Meaning |
|---|---|---|
| 300 | Multiple Choices | Indicates multiple options for the resource from which the client may choose (via agent-driven content negotiation). For example, this code could be used to present multiple video format options, to list files with different filename extensions, or to suggest word-sense disambiguation. |
| 301 | Moved Permanently | The target resource has been assigned a new permanent URI. The server sends that URI in the Location header, and clients should use it for future requests. |
| 302 | Found | Tells the client to look at (browse to) another URL. The HTTP/1.0 specification (RFC 1945) required the client to perform a temporary move with the same method (the original describing phrase was "Moved Temporarily"), but popular browsers implemented 302 responses by changing the method to GET. Therefore, HTTP/1.1 added status codes 303 and 307 to distinguish between the two behaviours. |
| 303 | See Other | The response to the request can be found under another URI using the GET method. When received in response to a POST (or PUT/DELETE), the client should presume that the server has received the data and should issue a new GET request to the given URI. |
| 304 | Not Modified | Indicates that the resource has not been modified since the version specified by the request headers If-Modified-Since or If-None-Match. In such case, there is no need to retransmit the resource since the client still has a previously-downloaded copy. |
| 305 | Use Proxy | The requested resource is available only through a proxy, the address for which is provided in the response. For security reasons, many HTTP clients (such as Mozilla Firefox and Internet Explorer) do not obey this status code. |
| 306 | Switch Proxy | No longer used. Originally meant "Subsequent requests should use the specified proxy." |
| 307 | Temporary Redirect | In this case, the request should be repeated with another URI; however, future requests should still use the original URI. In contrast to how 302 was historically implemented, the request method is not allowed to be changed when reissuing the original request. For example, a POST request should be repeated using another POST request. |
| 308 | Permanent Redirect | This and all future requests should be directed to the given URI. 308 parallel the behaviour of 301, but does not allow the HTTP method to change. So, for example, submitting a form to a permanently moved resource may continue smoothly. |