標籤:限制 cti href control span style 排除 google cat
今天將圖片服務切到使用了cdn的機器上面去,然後就部分圖片報如錯誤“HTTP Error 400. The request URL is invalid”
看到這種錯誤資訊,一般的開發人員心中可能會猜測到兩個原因
1.連結中有特殊字元
2.連結長度過長(似乎長度過長也不是這個錯,模糊不清,忘記了)
錯誤圖片的地址如下:http://{host}/SearchService.svc/rest/pic600x320/png/kv3hcxmnCmISVvFKojNBGpkN44MRx71vV4v7Qu7ikclbic2vX5Axnm8RxwhLoWyehsSz4J%C2%A72F6h4eQgvkrbzuKGR6y7sszK1KUY75RqxylZMumapwVQttfllaSPXwoRGEeVexDqjmMZSERPquL3uLZbv6Vxdx52nRDUW90SVVYeqkHZbx2w3T1coqt2v036tfaZ%C2%A72D8GBlPbIVJuhSFU5GA8116z8FkV4%C2%A72kDtsxSXy9XTFIziTToRpbQEkp7497O6q99
接下來就開始了按照我們所能遇見的錯誤原因進行排查
1.查看url,並沒有特殊字元(排除這個原因)
2.url咋一看確實很長,那我們刪除參數的一半長度再請求。結果是可以成功,然後通過不斷的加字元,發現長度超過339就報這個錯,而339後面也沒啥特殊字元,所以我們基本確定錯誤原因是應為url過長。
接下來就是解決相關問題
然後就是各種百度,查看相關修改querystring長度限制的配置
然後就修改web.config
1.修改 httpRuntime 節點下面增加 maxQueryStringLength,maxRequestLength配置
<httpRuntime requestPathInvalidCharacters="" requestValidationMode="2.0" maxQueryStringLength="2097151" maxUrlLength="2097151" maxRequestLength="2097151" relaxedUrlToFileSystemMapping="true" executionTimeout="36000" delayNotificationTimeout="36000" />
2.修改system.webServer節點,如下
<security> <requestFiltering allowDoubleEscaping="true" allowHighBitCharacters="true" > <requestLimits maxAllowedContentLength="2097151" maxQueryString="2097151" maxUrl="2097151" /> </requestFiltering> </security>
滿懷期待的儲存,運行,錯誤依舊,好像並沒有什麼卵用
這個時候就開始納悶了,為啥不行,會不會沒有生效,想到這兒可能就有很多人像我一樣,想到了iis的全域設定,會不會該項設定不能被覆蓋,我們用的依舊是全部設定的值
不用猜測,查看一下就知道了(注意,查看的requestFiltering是位於 system.webServer下,不要看錯節點了)
<section name="requestFiltering" overrideModeDefault="Allow" />
如果是關閉的,overrideModeDefault的值是Deny,Allow表示我們該配置會以我們網站具體配置為準。
那麼一切都是正常的啊,為啥就是報錯呢?!
最後stackoverflow上面一個沒有被採納的回到引起了我的注意
連結 https://stackoverflow.com/questions/8447698/the-request-url-is-invalid-in-iis-7
大致意思是,請求還沒到iis,被作業系統幹掉了。
這個時候再google上面搜到另外一篇文章,連結到了微軟的光放支援人員
地址如下 https://support.microsoft.com/zh-cn/help/820129/http-sys-registry-settings-for-windows
兩篇文章的大意都是我們需要修改註冊表,綜合兩篇文章,大概修改是註冊表如下兩個值
接下來就試一下,進入註冊表 CMD =》 regedit=》HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters
右擊空白地區,選擇Dword值,
建立名稱 UrlSegmentMaxLength,值設定成2048,然後點擊ok
UrlSegmentMaxCount的設定同上,值也是Dword 2048,點擊ok.
修改完成只有重啟http服務才會生效
- 依次單擊“開始”、“運行”,鍵入 Cmd,然後單擊“確定”。
- 在命令提示字元處,鍵入 net stop http,然後按 Enter。
- 在命令提示字元處,鍵入 net start http,然後按 Enter。
然後重啟IIS。再試一下,ok了,不報錯了,完美解決,在解決問題的過長中,領導給予了不少支援,實際情況不像本文描述的這麼簡單平凡!
記解決一次“HTTP Error 400. The request URL is invalid”的錯誤