HTTP - Redirect (status codes 3xx) - Client must take additional action

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.

Example

Javascript

In javascript, you can redirect with the window.location.assign function

window.location.assign('https://example.com/path/to/page');

Permanent Redirect with htaccess

<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 redirects

If 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

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 307 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

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
  • a POST (or PUT/DELETE), the client should presume that the server has received the data and should issue a redirect with a separate GET message.

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 HTTP - 304 Not Modified

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 302.

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


Powered by ComboStrap