会通过 server.transfer 发送 301 吗?
页面A.aspx:
protected void Page_Load(object sender, EventArgs e)
{
Response.Status = "301 Moved Permanently";
Server.Transfer("/pageB.aspx");
}
会通过 server.transfer 发送 301 吗?
页面A.aspx:
protected void Page_Load(object sender, EventArgs e)
{
Response.Status = "301 Moved Permanently";
Server.Transfer("/pageB.aspx");
}
如果您确实需要在 a 之后重定向Server.Transfer
,您可以手动进行:
this.Response.Status = "301 Moved Permanently";
this.Response.RedirectLocation = "Default2.aspx";
细节:
Server.Transfer
不会导致重定向
请参阅 MSDN:
Server.Transfer 作为 Response.Redirect 方法的有效替代品。Response.Redirect 指定浏览器请求不同的页面。因为重定向强制一个新的页面请求,浏览器向 Web 服务器发出两个请求,所以 Web 服务器处理一个额外的请求。IIS 5.0 引入了一个新函数 Server.Transfer,它将执行转移到服务器上的不同 ASP 页。这避免了额外的请求,从而获得更好的整体系统性能以及更好的用户体验。
实际上我只是尝试了您的代码,但它不起作用。
它确实发送了 301 状态:
HTTP/1.1 301 Moved Permanently
Server: ASP.NET Development Server/10.0.0.0
Date: Thu, 14 Jun 2012 18:54:22 GMT
X-AspNet-Version: 4.0.30319
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 626
Connection: Close
这是 Fiddler 的回复。
但它不工作
我认为它不起作用的原因是,当您从服务器发送 3xx 状态时,您需要发回用于重定向的 URL(这会导致对服务器的第二次请求)。这是在您使用时自动完成的Response.Redirect
,但Server.Transfer
不会,因此您从服务器发送重定向状态时没有 URL,这就是它不起作用的原因