web-dev-qa-db-ja.com

Response.RedirectHTTPステータスコード

ほとんどの場合、HTTP-301ステータスコード(「永続的に移動」)の方が適切であるにもかかわらず、ASP/ASP.NET Response.RedirectがHTTP-302ステータスコード(「一時的に移動」)を使用するのはなぜですか?

20
Vinz

ステータス301の応答はキャッシュ可能であると想定されており、ほとんどのASP /ASP.NETリダイレクトでその動作を望んでいないと思います。

ASP.NET 4.0には、必要に応じて RedirectPermanent メソッドがあります。

40
rick schott

私はこの便利なパーマネントリダイレクトを成功裏に使用しました:

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();
}
19
LaJmOn

Response.Redirectの一般的な使用例の1つは、ポストバック後にユーザーをサーバー側コードの別のページに移動することです。の線に沿って何か

private void MyButton_Click(object sender, EventArgs e)
{
    if (some condition) {
         Response.Redirect("ShowProduct.aspx");
    } else {
         Response.Redirect("SorryOutOfStock.aspx");
    }
}

そのような場合、301は完全に間違っています。実際、上記の場合(UIを操作した後、条件付きでユーザーを別のページに移動する)は、real this-page-moved-toよりもはるかに一般的なResponse.Redirectの使用法だと思います。 -another-URL-foreverシナリオ(戻りコード301が適切な場合)。

9
Heinzi

Heinziからの回答に加えて、301に注目する可能性が高いWeb上のエンティティは、検索エンジンだけです。ほとんどのブラウザは、最初のURLに対する後続の要求を自動的にリダイレクトするために、301を追跡および記録しません。ブラウザは301を302と同じように扱います。したがって、ASP.NETで生成されるような動的コンテンツの302は非常に適切です。

2
AnthonyWJones