Wygląda na to, że wybór opcji 302 powyżej 301 był nieco arbitralny. Jednak niekoniecznie wynika to z tego, że każdy URL będzie "musiał" wykorzystywać schemat HTTPS. Bardzo dobrze może być strona, która pozwala na dostęp zarówno z HTTP, jak i HTTPS, nawet jeśli może to zachęcić. Implementacja, w której może wystąpić taka sytuacja, może zawierać pewien kod w celu określenia, czy używać HTTPS na podstawie pewnych specjalnych kryteriów.
Jako scenariusz przyjrzyj się Gmailowi. W ramach ustawień można zezwolić lub zabronić protokołu HTTPS w dużych częściach aplikacji. Który kod powinien zostać zwrócony? 301 nie byłby dokładny, ponieważ nie jest "trwały" ... tylko zmiana na żądanie użytkownika. Niestety, 302 nie jest całkiem dokładny, albo dlatego, że błąd 302 implikuje, że istnieje zamiar zmiany łącza w pewnym momencie w przyszłości (odnośny odnośnik http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html).
Gmail jest bardzo trudnym przykładem, ponieważ niektóre części witryny, które umożliwiają tę opcję, zazwyczaj nie są indeksowane przez wyszukiwarkę, ale istnieje taka możliwość.
Aby odpowiedzieć na ostatnie pytanie, jeśli chcesz mieć inny kod statusu w ASP.NET MVC (który zakładam, że używasz z niewielkiego przykładu składni), można to zmienić za pomocą prostego, niestandardowego atrybutu:
public class MyRequireHttpsAttribute : RequireHttpsAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
if (!filterContext.HttpContext.Request.IsSecureConnection)
filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.MovedPermanently;
}
}
Teraz wszystkie działania, które implementują atrybut, powinny zwracać kod stanu 301 po uzyskaniu dostępu za pośrednictwem protokołu HTTP.
http://webmasters.stackexchange.com/questions/22268/when-redirecting-from-http-to-https-in-a-shop-site-which-status-code-should-iu – Hupperware