IIS 7 預設 MIME 映射表較為保守,導致 .apk、.ipa、.3gp、.flv 等新興文件類型無法直接下載,返回 404.3 Not Found。逐個添加極其繁瑣且易遺漏。本文介紹通過添加通配符 .* 映射至 application/octet-stream 的「一勞永逸」方案,並說明安全性考量與替代最佳實踐。
https://site.com/app.apk 返回 HTTP 404.3 – Not Found,詳細錯誤:The page you are requesting cannot be served because of the extension configuration.sc-status=404 sc-substatus=3。inetmgr),選中目標網站 (或「伺服器」節點配置全局)。.*application/octet-stream原理:.* 匹配任意副檔名,application/octet-stream 表示「二進制流」,瀏覽器收到此 Content-Type 會彈出「另存為」下載對話框,而不嘗試直接打開。
使用 appcmd.exe 可腳本化配置,避免手動點擊:
# 為指定站點添加 (需管理員權限 CMD/PowerShell)
%windir%\system32\inetsrv\appcmd.exe set config "Default Web Site" -section:staticContent /+"[fileExtension='.*',mimeType='application/octet-stream']" /commit:apphost
# 為全局 (所有站點繼承) 添加
%windir%\system32\inetsrv\appcmd.exe set config -section:staticContent /+"[fileExtension='.*',mimeType='application/octet-stream']" /commit:apphost
風險:
.*會導致 無副檔名文件 (如 Linux 隱藏文件.gitignore、.env、web.config等) 也被作為二進制下載,洩露敏感配置。
緩解方案:
.apk, .ipa, .apk 等),雖繁瑣但最安全。appcmd.exe set config "Default Web Site" -section:system.webServer/security/requestFiltering /+"hiddenSegments.[segment='.git']" /commit:apphostappcmd.exe set config "Default Web Site" -section:system.webServer/security/requestFiltering /+"fileExtensions.[fileExtension='.env',allowed='false']" /commit:apphostdefault.aspx/index.php 等優先於通配符匹配。| 場景 | 推薦策略 |
|---|---|
| 生產環境 Web 應用 | 精確添加業務所需 MIME (apk, ipa, apk, dmg, pkg 等),嚴禁 .* |
| 純靜態文件下載站 / CDN 邊緣節點 | 可啟用 .* + requestFiltering 隱藏敏感後綴 |
| 開發/測試環境 | .* 可接受,便利優先 |
# PowerShell 測試
Invoke-WebRequest -Uri "https://localhost/test.apk" -Method Head
# 檢查響應頭 Content-Type: application/octet-stream
# 或瀏覽器開發者工具 Network 面板查看響應頭
通過精確配置 MIME 映射並配合請求過濾,既能滿足多樣化文件下載需求,又能守住 Web 服務器的安全底線。