2009-11-12 108 views
20

为什么ASP/ASP.NET Response.Redirect使用HTTP-302状态码(“暂时移动”),即使在大多数情况下,HTTP-301状态码(“永久移动” )会更合适吗?Response.Redirect HTTP状态码

回答

39

状态301的响应应该是可缓存的,我不认为你想要这种行为对于大多数ASP/ASP.NET重定向。

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

+8

+1告诉我们关于RedirectPermanent。 – Heinzi 2009-11-12 16:41:24

+0

ASP.NET 4.0中新增的RedirectPermanent方法非常方便!不幸的是,我正在运行的项目正在运行2.0 ... – Vinz 2009-11-12 16:44:57

9

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的返回代码将是合适的)。

2

除了Heinzi的回答之外,网络上唯一可能需要注意301的实体才是搜索引擎。大多数浏览器不会跟踪和记录301,以便自动重定向对初始URL的任何后续请求。浏览器将301与302对待的方式相同。因此,动态内容中的302(如在ASP.NET中生成的)非常合适。

+0

是的,这是我担心的搜索蜘蛛。 – Vinz 2009-11-12 16:47:01

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

我也使用这个,但我只是想知道为什么我必须做这个“解决方法”。 – Vinz 2009-11-12 17:03:12

-1

你所得到的错误是不是由于Response.Redirect的!

永久移动的HTTP响应状态码301用于永久重定向,意味着当前链接或使用收到301 Moved Permanently响应的URL的记录应更新为响应的Location字段中提供的新URL 。

+5

如果你没有在每个答案中都发布http://onfrnz.com/search的链接,那会很好,这有点垃圾。谢谢。 – Kev 2012-09-07 22:14:24