网站中,设计了一个批量搜索的功能,用户可以输入多个关键词进行批量查询搜索,但不出意外的话还是出意外了,有些用户可能会输入N多个关键词,我为了性能等考虑,会限制个数,比如每次批量查询仅限50个以内,但还是有意外发生,有些关键词可能会很长,即会引发”HTTP Error 400. The request URL is invalid”的错误。如图
按以前的经验呢,先检查了网站程序上的web.config文件,httpRuntime 节点下的maxUrlLength配置以及security节点下的requestFiltering》maxUrl ,
确认都以及设置过了
<httpRuntime targetFramework="4.6.1" enableVersionHeader="false" requestPathInvalidCharacters="" requestValidationMode="2.0" maxQueryStringLength="2097151000" maxUrlLength="2097151000" maxRequestLength="2097151000" relaxedUrlToFileSystemMapping="true" executionTimeout="36000" delayNotificationTimeout="36000" />
<security>
<requestFiltering allowDoubleEscaping="true" allowHighBitCharacters="true" >
<requestLimits maxAllowedContentLength="2097151000" maxQueryString="2097151000" maxUrl="2097151000" />
</requestFiltering>
</security>
还是出现”HTTP Error 400. The request URL is invalid”的错误,最后问度娘、谷歌,最终找到解决方法:修改服务器的注册表。
Http.sys Windows 的注册表设置(https://learn.microsoft.com/zh-CN/troubleshoot/developer/webapps/iis/iisadmin-service-inetinfo/httpsys-registry-windows)
可以在以下注册表项下创建以下 DWORD 注册表值:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters
注册表项 | 默认值 | 有效值范围 | 注册表项函数 | WARNING 代码 |
---|---|---|---|---|
UrlSegmentMaxCount | 255 | 0 - 16,383 段 | 最大 URL 路径段数。 如果为零,则计数受最大值的 ULONGb 约束。 | 1 |
UrlSegmentMaxLength | 260 | 0 - 32,766 chars | URL 路径段中的最大字符数 (URL) 中斜杠之间的区域。 如果为零,则由最大值限制的 ULONG长度。 | 1 |
开干!
进入注册表 CMD =》 regedit=》HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters
右击空白区域,选择Dword值,新建名称 UrlSegmentMaxLength,双击键名,选择十进制,值设置成2048,然后点击 确认。
同样,再新建名称 UrlSegmentMaxCount,双击键名,选择十进制,值设置成2048,然后点击 确认。
如图
需要注意的是,修改完以后不会立即生效,需重启HTTP 服务。不想那么麻烦,也可以简单粗暴一下,重复服务器即可。
若不想或不允许重启服务器,可以按如下步骤来重启HTTP服务。
重启 HTTP 服务、键入和所有相关的 IIS 服务,请执行以下步骤:
选择 “开始”,选择 “运行”,键 入 Cmd,然后选择 “确定”。
停止HTTP服务:在命令提示符处,键入 net stop http,然后按 Enter。系统提示会停止相关联的服务器,输入y 确认继续
启动HTTP服务:在命令提示符处,键入 net start http,然后按 Enter。
停止IIS服务:在命令提示符处,键入 net stop iisadmin /y,然后按 Enter。
备注:依赖于 IIS 管理员服务服务的任何 IIS 服务也将停止。 请注意停止 IIS 管理员服务时停止的 IIS 服务。 下一步将重启每个服务。
重启步骤 4 中已停止的 IIS 服务。 为此,请在命令提示符处键 net start servicename 入,然后按 Enter。 在命令中, servicename 是要重启的服务的名称。 例如,若要重启万维网发布服务服务,请键入 net start World Wide Web Publishing Service,然后按 Enter。
再来测试一下,访问正常啦!
标签:服务,IIS,URL,重启,注册表,400,HTTP From: https://www.cnblogs.com/star8521/p/17280329.html