Response.Redirect HTTP 状态码

Posted

技术标签:

【中文标题】Response.Redirect HTTP 状态码【英文标题】:Response.Redirect HTTP status code 【发布时间】:2010-12-15 23:03:12 【问题描述】:

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

【问题讨论】:

【参考方案1】:

状态为 301 的响应应该是可缓存的,我认为您不希望大多数 ASP/ASP.NET 重定向具有这种行为。

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

【讨论】:

ASP.NET 4.0 附带的新的 RedirectPermanent 方法非常方便!不幸的是,我正在进行的项目正在运行 2.0...【参考方案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 将是完全错误的。事实上,我认为上述情况(在一些 UI 交互后有条件地将用户移动到另一个页面)是 Response.Redirectreal this-page-moved-to- 更常见的用法another-URL-forever 场景(返回代码 301 是合适的)。

【讨论】:

【参考方案4】:

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

【讨论】:

是的,我担心的是搜索蜘蛛。【参考方案5】:

你得到的错误不是由于 response.redirect !

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

【讨论】:

如果您没有在每个答案中不断发布指向onfrnz.com/search 的链接会很好,这有点垃圾邮件。谢谢。

以上是关于Response.Redirect HTTP 状态码的主要内容,如果未能解决你的问题,请参考以下文章

Response.Redirect和Server.Transfer比较--(转)

asp怎样用response.Redirect进行页面跳转。

Response.Redirect和Server.Transfer的区别

asp怎样用response.Redirect进行页面跳转。

response.Redirect如何在新窗口打开

为啥我使用 Response.Redirect 的时候出现错误?