Подтвердить что ты не робот

Response.Redirect HTTP status code

Почему ASP/ASP.NET Response.Redirect использует код состояния HTTP-302 ( "Moved Temporarily" ), хотя в большинстве случаев код статуса HTTP-301 ( "Перемещенный на постоянной основе" ) был бы более уместным?

4b9b3361

Ответ 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-адреса, указанного в поле "Местоположение" ответа.