修改MaxFieldLength與MaxRequestBytes徹底解決Request Too Long的問題
當 IIS7/7.5 收到的請求頭的長度超過16K(默認值),就會引發(fā)"Bad Request - Request Too Long. HTTP Error 400. The size of the request headers is too long."的錯誤。
博客園服務器曾遭遇過這個問題,我為此寫過一篇博文(cnzz統(tǒng)計代碼引起的Bad Request - Request Too Long),問題的原因是第三方統(tǒng)計服務cnzz的統(tǒng)計代碼寫入大量的cookie,請求時會攜帶著這些cookie,從而造成請求頭長度超過限制。
本來以為這個問題只在Chrome中出現(xiàn),后來有園友反饋Firefox也會出現(xiàn)這個問題。所以,要解決這個問題,必須從服務器端下手,這篇文章分享的就是如何從服務器端下手。
何處下手
根據(jù)IIS官方論壇的帖子(HTTP 400. The size of the request headers is too long),16K的請求頭/請求長度限制由是注冊表(HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters)中的兩個參數(shù) MaxFieldLength(請求頭) 與 MaxRequestBytes(請求頭與請求體) 決定的。所以,要從這兩個參數(shù)下手。
了解下手的對象
通過微軟官方文檔(http://support.microsoft.com/kb/820129)進一步了解MaxRequestBytes與MaxFieldLength:
MaxFieldLength - Sets an upper limit for each header.
用于設置每一個請求頭的字節(jié)數(shù)上限(默認16K)。
MaxRequestBytes - Determines the upper limit for the total size of the Request line and the headers.
用于設置請求行(請求體)與請求頭的總字節(jié)數(shù)上限(默認16K)。
如何下手
下手也就是調整 MaxFieldLength 與 MaxRequestBytes 的值(這里假設將這兩個值修改為32K),并使其生效。
運行regedit,進入 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters ,
1. 添加類型為 DWORD(32-bit)、名為 MaxFieldLength、值為十進制32768的項目;
2. 添加類型為 DWORD(32-bit)、名為 MaxRequestBytes、值為十進制32768的項目。
添加好了,如何讓它們生效呢?最簡單的方法就是重啟,可是對于服務器,最不想做的就是重啟。
還好,微軟官方文檔中提到了不重啟的解決方法,需要運行四個命令:
net stop http net start http net stop iisadmin /y net start servicename
但是第3個命令 net stop iisadmin 會停用IIS相關的所有服務,第4個命令要將IIS相關的所有服務一個一個啟動。
雖然不需要重啟服務器,但是這四個命令的解決方案我不喜歡。。。在網(wǎng)上也沒找到更好的解決方法。。。
后來,通過摸索,找到了一個更簡單的方法,只需三個命令:
net stop http net start http iisreset
這個方法已經(jīng)在服務器上通過實際驗證。
小結
搞技術的樂趣之一就是在遇到問題時能夠找到自己心目中想要的解決方法,心目中想要的解決方法不是它已在你心中,而是當它出來時,你心中會知道 —— 就是它!
生活中也是一樣,你心目中的那個人,你無法準確地描述出來,當她/他出現(xiàn)時,你心中會知道 —— 就是她/他。
相關文章
快速安裝并配置Windows Server 2022的網(wǎng)卡驅動
我們將介紹兩種常見的安裝方法:手動安裝和自動安裝,最后,我們將討論如何配置網(wǎng)卡驅動程序以確保網(wǎng)絡連接的穩(wěn)定性和性能,需要的朋友可以參考下2023-10-10用IIS建立的.net網(wǎng)站通過IP地址不能訪問解決方法
用iis建立一個.net的網(wǎng)站,在iis中綁定了服務器公網(wǎng)ip的80端口和127.0.0.1的80端口,結果用ip地址不能直接訪問2014-05-0564 位 ASP.Net 已注冊 需要 32 位 ASP.Net 才能安裝 Microsoft Reporting
這篇文章主要介紹了64 位 ASP.Net 已注冊 需要 32 位 ASP.Net 才能安裝 Microsoft Reporting,需要的朋友可以參考下2015-08-08Almp 安卓系統(tǒng)上搭建本地php服務器環(huán)境的步驟
在網(wǎng)上找到安卓系統(tǒng)的PHP+MySQL環(huán)境,甚是喜歡,拿來修改、試用了一番。已經(jīng)實現(xiàn)在安卓手機上搭建Web服務端,并且支持WordPress、Discuz、Phpmyadmin的運行2013-07-07Microsoft VBScript 運行時錯誤 錯誤 ''800a0046'' 沒有權限
Microsoft VBScript 運行時錯誤 錯誤 '800a0046' 沒有權限2009-06-06Windows下配置Nginx+PHP基本操作(啟動、重啟和退出)
經(jīng)常倒騰系統(tǒng),徘徊于 Windows 的便利和 Linux 的魔性,一旦折騰系統(tǒng)基本配置都要重弄,特此記錄對 Nginx和PHP的基本啟動、重啟和退出2018-05-05