About
The HTTP 3xx class of status code indicates that the client (user or user agent) must take additional action to complete the request.
The redirect url is defined by the location header.
A user agent may automatically redirect a request.
Navigation vs Redirect
An HTTP status code redirect means that the original resource has moved or is in another place, not that the browser should navigate to another URL.
The browser will then perform the same request but against another URI.
If the request has:
- a GET method, an HTTP redirect will have the same behavior as a navigation
window.location.assign('https://example.com/path/to/navigation/page');
Example
Permanent Redirect with htaccess
- All URL to http://www.gerardnico.com are redirected permantenly with the status code 301 with the help of the Apache Rewrite module
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ https://gerardnico.com/$1 [R=301,L]
</IfModule>
List
300 - Multiple Choices
The client is shown with a multiple choice.
For example, the client must choose between:
- multiple video format options,
- different files with different extensions,
- different word sense disambiguation.
301 - Moved Permanently
This and all future requests should be directed to the given URI.
For Googlebot, 301 means that:
- there is a better version than a given URL.
- this duplicate page is deprecated
You would choose this redirect when you change your domain name for instance.
For A/B test, use 302 redirects, not 301 redirectsIf you’re running an A/B test that redirects users from the original URL to a variation URL, use a 302 (temporary) redirect, not a 301 (permanent) redirect.
This tells search engines that this redirect is temporary—it will only be in place as long as you’re running the experiment—and that they should keep the original URL in their index rather than replacing it with the target of the redirect (the test page). JavaScript-based redirects are also fine.
302 - Found
After a post, the response may be a 302, to indicate that:
- the post was successful redirect
- the next step is to show another page
With HTTP/1.0 specification, the client must perform a temporary redirect (the original describing phrase was “Moved Temporarily”), but popular browsers implemented 302 with the functionality of a 303
The browser have implemented the 303 behavior for a 302 (ie when receiving a a 302 response from POST requests will send a GET request to the Location response header)
Therefore, HTTP/1.1, added the status codes 303 and section307 to distinguish between the two behaviors. 302 is then superseded by:
- 303
- and 307
in HTTP/1.1 but preserved for backward compatibility.
303 - See Other URI
example of usage: used to redirect for tracking analysis For instance, after the user click on a tracking link (in an email or in on page)
A 303 response to a GET request indicates that the origin server does not have a representation of the target resource that can be transferred by the server over HTTP.
However, the Location field value refers to a resource that is descriptive of the target resource, such that making a retrieval request on that other resource might result in a representation that is useful to recipients (user generally) without implying that it represents the original target resource.
By sending a 303 when asked for a non-information resource and redirecting to an information resource about the non-information resource, the server answers the requesters information need without having to supply the actual thing 1)
Since HTTP/1.1, a 303 will always end by a GET request to the new URL from the client.
When a 303 is received in response to :
- a GET method, the response to the request can be found under another URI
304 - Not Modified
A 304 is send by the server when it receive a conditional get request from the client because it has already a response in its cache.
More see 304 - Not Modified HTTP Status
307 - Temporary redirect
provides a new URL for the browser to resubmit a GET or POST request.
The requested URL has been moved to a temporary location and will be back if not, uses a section302.
Used in case of A/B test for instance.
308 - Permanent redirect
provides a new URL for the browser to resubmit a GET or POST request.
Documentation / Reference
- HTTP/1.1 defines several status codes for redirection (RFC 7231)