瀏覽器上傳大檔案時,IIS 預設僅緩衝前 48KB (49152 bytes) 便傳遞給應用程式 (如 ASP/ASP.NET),超過部分需應用程式主動請求 (如 Request.BinaryRead(Request.TotalBytes)) 才會繼續傳輸。若應用程式未及時請求,連線將掛起,最終導致 HTTP 413 Request Entity Too Large 或瀏覽器陷入重試死循環。
此 Metabase 屬性控制 IIS 預讀緩衝大小,預設 49152 位元組,最大可設 4GB。
10485760),勿盲目設過大| 屬性 | 適用版本 | 說明 |
|---|---|---|
| maxRequestLength | IIS 6 (ASP.NET) | web.config 中 <httpRuntime maxRequestLength="10240" /> (單位 KB) |
| maxAllowedContentLength | IIS 7+ | web.config 中 <requestLimits maxAllowedContentLength="10485760" /> (單位位元組) |
兩者預設值通常較大,但需確認未被誤設過小。
若上傳由第三方 ISAPI 擴展處理且未遵循標準請求模式,可嘗試將 UploadReadAheadSize = 0,強制 IIS 直接將資料流導向 ISAPI。注意: 這會關閉 IIS 應用程式預讀緩衝,可能影響其他應用效能,需謹慎測試。
過大的 UploadReadAheadSize 會擴大攻擊面:惡意用戶可利用大檔上傳耗盡頻寬/記憶體發動 DoS 攻擊。防護建議:
Request.BinaryRead(Request.TotalBytes) 或對應讀取方法UploadReadAheadSize (預設 48KB → 業務需求值)maxRequestLength / maxAllowedContentLength 未限制過小