All these three are used to redirect the user from one location to another, but there are subtle differences.
- Creates a whole new HTTP request to a new Url.
- Produces a 302 http status code
- Equivalent to ‘Temporary Redirect’ and the old Url is retained in search indexes. There won’t be any transfer of metrics.
Response.AddHeader on Location
- Creates a whole new HTTP request to a new Url. (Common with Response.Redirect)
- Produces a 301 http status code
- The new Url is indexed instead by searchbot. There will be some loss of page rank / traffic value, but the stats will get transferred over.
- This doesn’t change the current Url
- An internal transfer is done on the server during execution path without creating a new HttpRequest.
- FYI, the ‘rewrite’ option in the IIS urlrewrite module does a Server.Transfer.