【茶包射手專欄】探索ZIP下載破損問題
CHE反應我的中文編碼解析工具 Ver 1.3下載後無法解壓縮。
做了些測試歸納出以下結果:
- 同樣的檔案內容,由備用站台blog2.darkthread.net下載就一切正常。
- 下載PDF等檔案沒有問題,但ZIP檔全倒。(ZIP檔走備用站台也OK)
- 我另外上傳了ZIP檔,不經過Community Server的檔案機制,下載則沒有問題。
- 更驚訝的下載ZIP破損問題讓IE6, IE7, IE8全倒,但Firefox、Chrome、Safari、Opera都OK。
於是我決定做些實驗,找出其中的祕密。先上傳一個Test.txt壓成Test.zip,再分別由主站、備站的同一URL下載ZIP檔案,發現二者內容完全不同。
接著我開啟HttpWatch,觀察二者及以直接以HTTP下載Test.zip的傳輸異同,這下就看出差別來了。
爛掉的ZIP檔下載時被開啟了GZip壓縮(應是IIS的HTTP壓縮功能,可以參考保哥的加速前端網頁效能的14條規則的第4點),見Stream Tab右邊,出現了Content-Encoding: gzip。

解壓後的Conent看來很正常:
備站下載時沒有開啟GZip壓縮:

直接下載檔案時也沒有開啟GZip壓縮:

由這些結果來看,我的推論如下:
- 主站台被設定了HTTP壓縮功能(但對靜態檔案未開啟壓縮),當檔案透過ASP.NET程式下載時,啟用了GZip壓縮。(實際設定要再向Web Hosting廠商求證)
這可以解釋同一站台下載同一檔案: HTTP GET OK,透過ASPX下載卻有問題。 - 備用站台未開HTTP壓縮,故無此問題。
- IE在處理GZip壓縮過的ZIP檔時有問題,導致存檔內容錯亂。我認為這是IE的Bug,理由是: 其他的瀏覽器均無此問題,而且HttpWatch也能正確還原(見先前解壓Content一圖)
這問題我會向Web Hosting廠商詢問看看,並提報問題給MS,若有後續消息再向各位報告。在此之前,大家如果需要由本站下載ZIP,請先用非IE瀏覽器。