由于链接地址长度过长引起的”HTTP Error 400. The request URL is invalid”错误解决办法:修改注册表

Posted 武穆逸仙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了由于链接地址长度过长引起的”HTTP Error 400. The request URL is invalid”错误解决办法:修改注册表相关的知识,希望对你有一定的参考价值。

网站中,设计了一个批量搜索的功能,用户可以输入多个关键词进行批量查询搜索,但不出意外的话还是出意外了,有些用户可能会输入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。

 

再来测试一下,访问正常啦!

 
来源:由于链接地址长度过长引起的”HTTP Error 400. The request URL is invalid”错误解决办法:修改注册表 https://www.iwmyx.cn/yyljdzcdgc.html

记解决一次“HTTP Error 400. The request URL is invalid”的错误

今天将图片服务切到使用了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服务才能生效

  1. 依次单击“开始”、“运行”,键入 Cmd,然后单击“确定”。
  2. 在命令提示符处,键入 net stop http,然后按 Enter。
  3. 在命令提示符处,键入 net start http,然后按 Enter。

然后重启IIS。再试一下,ok了,不报错了,完美解决,在解决问题的过长中,领导给予了不少支持,实际情况不像本文描述的这么简单平凡!

 

以上是关于由于链接地址长度过长引起的”HTTP Error 400. The request URL is invalid”错误解决办法:修改注册表的主要内容,如果未能解决你的问题,请参考以下文章

过长时间充电会不会导致手机重启?

缩短url-url短地址链接

Excel表格里的链接地址显示过长怎么解决?

Java 域名短链接服务原理及解决方案

MybatisPlus自定义ID生成器(解决官方雪花算法长度过长导致JS精度丢失问题)

Mybatis plus自定义ID生成器(解决官方雪花算法长度过长导致JS精度丢失问题)