為什么不要使用Response.Close()


 

   不要使用Response.Close()

   不要使用Response.Close()

   不要使用Response.Close()

   

   1  因為:Close()方法會調用HttpWorkerRequest.CloseConnection()方法。終止(Terminate)與客戶端的套接字連接,並使得服務器,客戶端以及之間設施上的緩存(buffer)失效。導致發送到客戶端的數據丟失。

   

   2 方法Response.End()是為了兼容經典ASP程序,在Asp.NET 1.0中引入的,在調用后會拋出ThreadAbortException異常。成功時則中止(abort)當前的線程,處理管道觸發EndRequest事件,不再處理之后的代碼。會以同步的方式將響應內容發送(flush)給客戶端。

      由於.NET 設計原因,Response.End()在WebForm框架下可以終止代碼執行,不再處理End()之后的代碼。在MVC框架下則只是返回響應流,不會中止代碼執行。

     

   3 此外還可以使用HttpApplication.CompleteRequest()方法結束請求。

      Response.Flush();

      this.Context.ApplicationInstance.CompleteRequest();

   

   綜上所述:只有代碼發生錯誤(惡意的攻擊),希望終止對於客戶端的響應/連接時才可以使用Response.Close()

   如果你想結束請求,並向客戶端發送請求則應該優先使用HttpApplication.CompleteRequest()方法。

參考文章:

1 http://weblogs.asp.net/hajan/why-not-to-use-httpresponse-close-and-httpresponse-end

2 http://stackoverflow.com/questions/1886729/httpresponse-end-vs-httpresponse-close-vs-httpresponse-suppresscontent

3 http://www.cnblogs.com/v5wa/p/3165367.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM