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