为什么ASP/ASP.NET Response.Redirect使用HTTP-302状态码(“暂时移动”),即使在大多数情况下,HTTP-301状态码(“永久移动” )会更合适吗?Response.Redirect HTTP状态码
回答
状态301的响应应该是可缓存的,我不认为你想要这种行为对于大多数ASP/ASP.NET重定向。
如果需要,ASP.NET 4.0有RedirectPermanent方法。
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的返回代码将是合适的)。
除了Heinzi的回答之外,网络上唯一可能需要注意301的实体才是搜索引擎。大多数浏览器不会跟踪和记录301,以便自动重定向对初始URL的任何后续请求。浏览器将301与302对待的方式相同。因此,动态内容中的302(如在ASP.NET中生成的)非常合适。
是的,这是我担心的搜索蜘蛛。 – Vinz 2009-11-12 16:47:01
我用这个方便的永久重定向成功:
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();
}
我也使用这个,但我只是想知道为什么我必须做这个“解决方法”。 – Vinz 2009-11-12 17:03:12
你所得到的错误是不是由于Response.Redirect的!
永久移动的HTTP响应状态码301用于永久重定向,意味着当前链接或使用收到301 Moved Permanently响应的URL的记录应更新为响应的Location字段中提供的新URL 。
如果你没有在每个答案中都发布http://onfrnz.com/search的链接,那会很好,这有点垃圾。谢谢。 – Kev 2012-09-07 22:14:24
- 1. 的Response.Redirect省略Http状态302
- 2. HTTP状态代码
- 3. System.Net.WebException HTTP状态码
- 4. HTTP 1xx状态码
- 5. http状态码200
- 6. HTTP状态码406
- 7. SimpleXMLElement - HTTP状态码?
- 8. 是否HTTP状态码事
- 9. 阅读http状态码fsockopen
- 10. HTTP状态代码:在GCMDemo
- 11. 蟒蛇HTTP状态代码
- 12. 设置http状态代码
- 13. 角$ http和状态码304
- 14. Flash和HTTP状态码207
- 15. PUT的HTTP状态代码
- 16. NotFoundException的HTTP状态码500
- 17. 开关HTTP状态代码
- 18. REST的4xx http状态码
- 19. HTTP状态码200 vs 202
- 20. Python urllib2 URLError HTTP状态码。
- 21. HTTP状态代码413
- 22. 替代HTTP状态码401?
- 23. HTTP状态码webview android,WebViewClient
- 24. 502 HTTP状态代码
- 25. 解析HTTP状态码
- 26. GWT Requestfactory的HTTP状态码
- 27. 检测HTTP状态代码
- 28. 获取HTTP状态代码
- 29. HTTP状态码“0”无效
- 30. 可以重新使用416状态码的HTTP状态码吗?
+1告诉我们关于RedirectPermanent。 – Heinzi 2009-11-12 16:41:24
ASP.NET 4.0中新增的RedirectPermanent方法非常方便!不幸的是,我正在运行的项目正在运行2.0 ... – Vinz 2009-11-12 16:44:57