Почему ASP/ASP.NET Response.Redirect использует код состояния HTTP-302 ( "Moved Temporarily" ), хотя в большинстве случаев код статуса HTTP-301 ( "Перемещенный на постоянной основе" ) был бы более уместным?
Response.Redirect HTTP status code
Ответ 1
Ответы со статусом 301 должны быть кэшируемыми, и я не думаю, что вы хотите этого поведения для большинства перенаправления ASP/ASP.NET.
В ASP.NET 4.0 есть метод RedirectPermanent, если это необходимо.
Ответ 2
Я успешно использовал этот удобный постоянный переадресации:
public void RedirectPermanent(string newPath)
{
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Status = "301 Moved Permanently";
HttpContext.Current.Response.AddHeader("Location", newPath);
HttpContext.Current.Response.End();
}
Ответ 3
Одним из распространенных вариантов использования Response.Redirect
является перемещение пользователя на другую страницу в серверном коде после обратной передачи, например. что-то вдоль линий
private void MyButton_Click(object sender, EventArgs e)
{
if (some condition) {
Response.Redirect("ShowProduct.aspx");
} else {
Response.Redirect("SorryOutOfStock.aspx");
}
}
В этих случаях 301 был бы совершенно неправильным. На самом деле, я думаю, что вышеупомянутый случай (условно переместить пользователя на другую страницу после некоторого взаимодействия с пользовательским интерфейсом) является гораздо более распространенным использованием Response.Redirect
, чем реальный сценарий с этой страницей - перемещенный-другой-URL-навсегда ( где код возврата 301 будет подходящим).
Ответ 4
В дополнение к ответу от Heinzi, единственное лицо в Интернете, которое, вероятно, будет очень внимательно относиться к 301, будет поисковыми системами. Большинство браузеров не будут отслеживать и записывать 301, чтобы автоматически перенаправить любой последующий запрос на исходный URL. Браузеры одинаково обрабатывают 301 так, как они относятся к 302. Следовательно, 302 в динамическом контенте, таком как сгенерированный в ASP.NET, вполне уместно.
Ответ 5
Ошибка, которую вы получаете, не вызвана response.redirect!
Код статуса HTTP-ответа 301 Перемещен Постоянно используется для постоянного перенаправления, что означает, что текущие ссылки или записи с использованием URL-адреса, на который получен ответ "Перенесенный постоянный ответ 301", должны быть обновлены до нового URL-адреса, указанного в поле "Местоположение" ответа.