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