我遇到的問題記錄在這裏:IE 6和分塊編碼問題
http://support.microsoft.com/kb/914453
從使用 分塊上 傳輸編碼Web服務器訪問你的Web應用程序或Web站點 基於Microsoft Windows XP的 計算機上的基於Microsoft Windows Server 2003的或 。然後,瀏覽器或Web應用程序停止響應。
此問題,當 Wininet.dll文件期間 初始Winsock的數據接收的數據的不完全 塊接收 操作中發生。當發生此行爲時,第二個Winsock數據接收 操作只讀取一個塊令牌。 例如,第二個Winsock數據 接收操作可能只能從 套接字讀取 回車換行符(CRLF)。然後,Wininet.dll文件 連續調用Winsock 選擇功能30秒。 文件正在等待接收更多數據。 但是,如果沒有數據到達,則 瀏覽器或Web應用程序會停止響應 。
這個問題發生在我用來從數據庫檢索文件的HttpHandler上。相關的代碼是:
var buffer = GetSomeByteArray();
context.Response.Clear();
context.Response.ContentType = type;
context.Response.BinaryWrite(buffer);
context.Response.End();
我可以通過關閉動態壓縮或根本不指定個.axd作爲可壓縮文件類型在IIS 6級別禁用分塊編碼,但我不希望這樣做。我的問題是,在我的代碼中是否存在一個錯誤,或者我沒有這樣做,我應該這樣做會阻止瀏覽器接收不完整的塊?
我不會做ASP/IIS,但是在JSP/Servlet的情況下,只有在發出響應之前沒有設置內容長度標題時纔會使用分塊編碼。如果您設置了內容長度標題,那麼只會使用流模式。看看它是否有助於您的ASP/IIS應用程序預先設置內容的長度。 – BalusC 2010-07-09 18:16:41
當IIS必須壓縮「動態」內容時,IIS將強制分塊編碼,因爲它不會對其進行緩存,因此壓縮會在運行中發生。這裏的問題不是壓縮 - 這正是首先觸發分塊編碼的原因。實際上,我的代碼中實際上有一行代碼用於添加內容長度標題,但IIS在使用分塊編碼時不會發送內容長度標題,因爲這違反了規範。 – Chris 2010-07-09 18:20:10