參考文檔: http://msdn.microsoft.com/zh-cn/library/cc737382(v=ws.10).aspx
http://www.java123.net/v/127192.html
http://blogs.iis.net/rakkimk/archive/2009/03/17/iis7-tweet-1-setting-uploadreadaheadsize.aspx
如果 Web 服務器、網站或站點的單個目錄或文件上啟用了客戶端證書,則客戶端在上載較大的文件時可能會看到 HTTP 413 錯誤。
如果客戶端向運行 IIS 6.0 的 Web 服務器發送一個較長的 HTTP 請求(如 POST 請求),則 IIS 工作進程可能會收到足以解析請求標頭的數據,但不會收到整個請求實體正文。當 IIS 工作進程檢測到需要客戶端證書以向客戶端返回數據時,IIS 嘗試重新協商客戶端連接。不過,客戶端無法重新協商連接,因為它正在等待向 IIS 發送請求中的其余數據。
如果請求客戶端重新協商,則必須使用 SSL 預加載功能預加載請求實體正文。SSL 預加載功能將使用用於 ISAPI 擴展的 UploadReadAheadSize 配置數據庫屬性的值。但是,如果 UploadReadAheadSize 小於內容長度,則返回 HTTP 413 錯誤,並關閉連接以防止出現死鎖。(在以下情況下出現“死鎖”:客戶端正在等待發送請求實體,而服務器等待完成重新協商,重新協商要求客戶端能夠發送數據,可是這是無法完成的。)
解決方案是確保沒有禁止客戶端發送整個實體正文。為此,應將 UploadReadAheadSize 的值更改為大於內容長度的值和最大請求實體主體限制更改為大於文件大小。
關於如何設置IIS7的配置,請參考http://www.iis.net/ConfigReference
一. 配置UploadReadAheadSize
Appcmd.exe命令位於"%WinDir%\System32\Inetsrv"
appcmd.exe set config -section:system.webServer/serverRuntime /uploadReadAheadSize:"49152" /commit:apphost
你把"uploadReadAheadSize"的值逐漸改大來做測試,比如可以98304 -> 196608 -> 393216。
二. 配置MaxRequestEntityAllowed
在IIS“功能視圖”中雙擊“ASP”模塊,打開“限制屬性”,將最后一項“最大請求實體主體限制[maxRequestEntityAllowed]”改為你需要的值(例如 1073741824, 1GB)。
同時,請注意如果你上傳的文件較大,請考慮一下“腳本超時[scriptTimeOut]”是否需要更改, 默認是00:01:30,這里改成了00:05:30。