【茶包射手專欄】探索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瀏覽器。

歡迎推文分享:
Published 11 February 2009 09:54 AM 由 Jeffrey
Filed under: , ,
Views: 11,201



意見

# CHE said on 10 February, 2009 08:32 PM

Jeffrey 兄你好,

昨天我這邊測試的結果,解壓縮出來的那個檔案,

雖然EncAnalyzer131 沒有副檔名,但是我把那個檔案改名成有副檔名-->EncAnalyzer131.RAR 或 .ZIP,再解一次就可以發現 EncodingAnalyzer.exe 和 EncodingAnalyzer.pdb 兩個檔案了

# tim said on 10 February, 2009 08:54 PM

應該是 ie 的有趣 bug. 他在 gzip 壓縮下的 zip 會不把第一層解開, 保留著 gzip 的壓縮, 可以參考下面連結:

www.waltercedric.com/.../1124-download-issues-on-my-homepage-zip-files-corrupt.html

www.talis.com/.../1819

真的將該檔名加上.gz 後, 如 EncAnalyzer131.zip.gz 就可以解開兩次取得正確的內容了, 所以解決方式就會變成:

1. ie bug fix (不知有沒有)

2. 對 zip 檔不要壓縮 (不過目前是透過 aspx 輸出壓縮的關係)

3. user 不用 ie

4. 用 ie 下載的檔案多加 .gz 這層殼......

# 小桶子 said on 10 February, 2009 11:24 PM

如果遇到 直接用winrar的修覆有用嗎??

# wcchien said on 13 February, 2009 06:47 AM

我以前在 IIS6 上 enable GZIP, 執行 Moodle 系統(PHP) 曾發生同樣問題, 後來參考

support.microsoft.com/.../en-us

To work around this problem, change the MIME type for the .ZIP file from application/x-zip-compressed to application/octet-stream. To change the MIME type, follow these steps:

Click Start, point to Administrative Tools, and then click Internet Information Services (IIS) Manager.

Right-click the server (local computer) tree, where server (local computer) is the name of your IIS server, and then click Properties.

Click MIME Types.

Scroll down the registered MIME type list to find the .zip entry.

Click the .zip application/x-zip-compressed entry, and then click Edit.

Change the MIME type value to application/octet-stream.

Stop and then restart the IIS Admin Service to apply the change to the MIME type.

才解決問題, 以上建議參考一下

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<February 2009>
SunMonTueWedThuFriSat
25262728293031
1234567
891011121314
15161718192021
22232425262728
1234567
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication