2010-07-09 58 views
0

我遇到的問題記錄在這裏: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級別禁用分塊編碼,但我不希望這樣做。我的問題是,在我的代碼中是否存在一個錯誤,或者我沒有這樣做,我應該這樣做會阻止瀏覽器接收不完整的塊?

+0

我不會做ASP/IIS,但是在JSP/Servlet的情況下,只有在發出響應之前沒有設置內容長度標題時纔會使用分塊編碼。如果您設置了內容長度標題,那麼只會使用流模式。看看它是否有助於您的ASP/IIS應用程序預先設置內容的長度。 – BalusC 2010-07-09 18:16:41

+0

當IIS必須壓縮「動態」內容時,IIS將強制分塊編碼,因爲它不會對其進行緩存,因此壓縮會在運行中發生。這裏的問題不是壓縮 - 這正是首先觸發分塊編碼的原因。實際上,我的代碼中實際上有一行代碼用於添加內容長度標題,但IIS在使用分塊編碼時不會發送內容長度標題,因爲這違反了規範。 – Chris 2010-07-09 18:20:10

回答

0

你的代碼很好。這些文件有多大?如何使用內容處置:附件?另外,什麼Content-Type?

+0

我使用http處理程序發回將在頁面中內聯顯示的圖像。將其作爲附件發回將不起作用。內容類型目前是image/png,但實際上它可能是image/jpeg或image/gif。 – Chris 2010-07-09 18:22:54

+0

是的,好的 - 那麼你的代碼絕對沒有錯。 – 2010-07-09 18:26:38