【发布时间】:2010-12-15 23:03:12
【问题描述】:
为什么 ASP/ASP.NET Response.Redirect 使用 HTTP-302 状态代码(“临时移动”),即使在大多数情况下 HTTP-301 状态代码(“永久移动”)更合适?
【问题讨论】:
标签: c# asp.net http redirect asp-classic
为什么 ASP/ASP.NET Response.Redirect 使用 HTTP-302 状态代码(“临时移动”),即使在大多数情况下 HTTP-301 状态代码(“永久移动”)更合适?
【问题讨论】:
标签: c# asp.net http redirect asp-classic
状态为 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 比 real this-page-moved-to- 更常见的用法another-URL-forever 场景(返回代码 301 是合适的)。
【讨论】:
除了 Heinzi 的回答之外,网络上唯一可能会引起 301 关注的实体是搜索引擎。大多数浏览器不会跟踪和记录 301,以便自动重定向初始 URL 的任何后续请求。浏览器对待 301 的方式与对待 302 的方式相同。因此,在 ASP.NET 中生成的动态内容中的 302 非常合适。
【讨论】:
你得到的错误不是由于 response.redirect !
HTTP 响应状态代码 301 Moved Permanently 用于永久重定向,这意味着使用收到 301 Moved Permanently 响应的 URL 的当前链接或记录应更新为响应的 Location 字段中提供的新 URL。
【讨论】: