2012-06-14 24 views
0

301會通過server.transfer發送嗎?Server.Transfer()和http 301

PageA.aspx:

protected void Page_Load(object sender, EventArgs e) 
    { 
     Response.Status = "301 Moved Permanently"; 
     Server.Transfer("/pageB.aspx"); 
    } 
+2

你不能這樣嘗試自己的網址是什麼? (另外,不,我不這麼認爲。) – Ryan

回答

1

如果你確實需要一個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的repsonse。

但它不工作

我覺得爲什麼它不工作的原因,是因爲當你從服務器發送3xx狀態,你需要發回用於重定向的URL(這將導致第二請求到服務器)。當您使用Response.Redirect這是自動完成的,但Server.Transfer所以你從服務器發送一個重定向狀態沒有,這就是爲什麼它不工作