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.
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:
window.location.assign('https://example.com/path/to/navigation/page');
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ https://gerardnico.com/$1 [R=301,L]
</IfModule>
The client is shown with a multiple choice.
For example, the client must choose between:
This and all future requests should be directed to the given URI.
For Googlebot, 301 means that:
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.
After a post, the response may be a 302, to indicate that:
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:
in HTTP/1.1 but preserved for backward compatibility.
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 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
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.
provides a new URL for the browser to resubmit a GET or POST request.