簡體   English   中英

Response.Redirect HTTP狀態代碼

[英]Response.Redirect HTTP status code

為什么ASP / ASP.NET Response.Redirect使用HTTP-302狀態代碼(“暫時移動”),即使在大多數情況下HTTP-301狀態代碼(“永久移動”)更合適?

狀態301的響應應該是可緩存的,我認為您不希望大多數ASP / ASP.NET重定向的行為。

如果需要,ASP.NET 4.0具有RedirectPermanent方法。

我已經成功使用了這個方便的永久重定向:

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

Response.Redirect一個常見用例是在回發后將用戶移動到服務器端代碼中的另一個頁面,例如

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

在這些情況下,301將是完全錯誤的。 事實上,我認為上述情況(在一些UI交互后有條件地將用戶移動到另一個頁面)是一個更常見的Response.Redirect使用,而不是真正的這個頁面移動到另一個URL永遠的場景(其中返回代碼301是合適的)。

除了Heinzi的答案之外,網上唯一可能會注意到301的實體將是搜索引擎。 大多數瀏覽器不會跟蹤和記錄301,以便自動重定向任何后續的初始URL請求。 瀏覽器對301的處理方式與302處理方式相同。因此,動態內容中的302(例如在ASP.NET中生成)非常合適。

你得到的錯誤不是由於response.redirect!

HTTP響應狀態代碼301 Moved Permanently用於永久重定向,這意味着使用收到301 Moved Permanently響應的URL的當前鏈接或記錄應更新為響應的Location字段中提供的新URL。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM