2009-11-12 13 views
20

ほとんどの場合、HTTP-301ステータスコード(「Moved Permanently」)が使用されても、ASP/ASP.NET Response.RedirectがHTTP-302ステータスコード(「Moved Temporarily」) )より適切でしょうか?Response.Redirect HTTPステータスコード

答えて

39

ステータス301のレスポンスはキャッシュ可能であると考えられています。ほとんどのASP/ASP.NETリダイレクトでその動作をしたくないと思います。

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

+8

+1 RedirectPermanentについて教えてください。 – Heinzi

+0

ASP.NET 4.0に付属の新しいRedirectPermanentメソッドは、非常に便利です!残念ながら、私が取り組んでいるプロジェクトは2.0を実行しています... – Vinz

9

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インタラクションの後でユーザーを別のページに条件付きで移動)は、よりももっと一般的な使用であると思われます。このページ移動された別のURL永遠のシナリオ301の戻りコードが適切な場合)。

2

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

+0

はい、それは私が心配している検索スパイダーです。 – Vinz

19

私は成功を収めて、この便利な恒久的なリダイレクトを使用しました:

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(); 
} 
+1

私もthisoneを使用していますが、なぜこの "回避策"を行わなければならないのか不思議でした。 – Vinz

-1

あなたが取得しているエラーはResponse.Redirectをするためではありません!

恒久的に移動し、HTTP応答ステータスコード301は、301応答のLocationフィールドで提供される新しいURLに更新しなければならないために受信される永久レスポンス移動URLを使用して、現在のリンクやレコードを意味し、永続的にリダイレクトするために使用されています。

+5

回答がすべてhttp://onfrnz.com/searchへの投稿リンクを残していないと良いでしょう。ちょっとスパムです。ありがとう。 – Kev

関連する問題