2008年11月18日 星期二

ASP.NET 當上傳檔案過大時任何回應瀏覽器的動作都無效

  基本的 HTTP 通訊協定就是 Browser 對 Server 發出 HTTP Request 指令,Server 收到 HTTP Request 指令後開始進行資料的運算與處理,然後從 Server 回應 HTTP Response 給 Browser,Browser 收到 HTTP Response 指令後負責處理網頁的顯示或網頁轉向等動作。

  所以當你透過 HTTP 上傳過大的檔案時,雖然 ASP.NET 程式有開始執行,但是只要執行到 ASP.NET 設定的 maxRequestLength 上限時,就會將此次的 HTTP 對話直接關閉 ( 斷線 ),導致 Browser 無法完成 HTTP Request 這個動作,所以連 HTTP Request 都沒有完成的情況下,怎麼可能還從 Server 那邊得到 HTTP Response 指令!所以 Browser 根本不知道如何處理接下來的動作,這時如果你是使用Internet Explorer 瀏覽器的話,就會出現 IE 預設的錯誤訊息 ( 請檢查您的網際網路連線。嘗試瀏覽其他網站,確定您已連線至網際網路。 ),使用者會感覺上好像 Server 端的程式出錯了,但是其實是 Browser 無法處理 HTTP 指令才導致這個畫面的出現。

  所以你寫的任何要回應給 Browser 的程式都是沒有用的 ( 例如: Response.Redirect("Error.htm"); ),Browser 完全接收不到喔!! 也因此這問題不只在 ASP.NET 會發生,在其他的 Web 應用平台都會有類似的問題,但這說穿了也不應該是個問題,你只要了解 HTTP 的運作機制,就不難了解為什麼會這樣!

  預設來說 ASP.NET 的最大的檔案上傳限制為 4096 (4 MB),如果要調大檔案上傳的限制必須要調整 web.config 中在 區段下新增一個 的設定,如下:

<configuration>
<system.web>
<httpruntime maxrequestlength="40000" executiontimeout="300">
</SYSTEM.WEB>
</configuration>

沒有留言:

張貼留言