HTTP错误414.请求URL太长.asp.net

本文关键字:太长 asp net URL 请求 错误 HTTP | 更新日期: 2023-09-27 17:59:36

我收到错误"HTTP错误414。请求URL太长。"从下面的文章中,我了解到这是由于一个很长的查询字符串:

http://www.mytecbits.com/microsoft/iis/query-string-too-long

  1. 在web.config中,我有maxQueryStringLength="2097151"。这是最大值吗
  2. 为了解决这个问题,我应该在web.config中设置maxUrl吗?如果是,支持的最大值是多少

我应该怎么做来修复这个错误?

HTTP错误414.请求URL太长.asp.net

此错误实际上是从http.sys引发的,而不是从IIS引发的。在请求传递到请求处理管道中的IIS之前,会引发错误。

  • 为了验证这一点,您可以检查HTTP响应标头中的Server标头值,如下所示https://stackoverflow.com/a/32022511/12484.

要使https.sys接受更长的请求URL而不引发HTTP 414错误,请在服务器PC的Windows注册表中,在Computer''HKEY_LOCAL_MACHINE''SYSTEM''CurrentControlSet''Services''HTTP''Parameters处,创建一个名为MaxFieldLength且值足够大的DWORD类型值,例如65535。

  • 参考:适用于Windows的Http.sys注册表设置

如果您决定进行此更改,那么显然需要在所有环境(包括所有生产服务器)中进行更改,而不仅仅是在您的本地开发PC上。

此外,您的团队用于设置新服务器实例的任何脚本和/或文档都需要更新以包含此注册表设置,这样您的团队在设置新的生产服务器时就不会忘记在18个月后应用此设置。

最后,请注意,进行此更改可能会对服务器上运行的所有应用程序产生不利的安全后果,因为攻击者提交的大型HTTP请求不会像往常一样在管道早期被拒绝。

作为绕过http.sys安全性的替代方案,可以考虑将请求更改为接受HTTPPOST而不是HTTPGET,并将参数放入POST请求体而不是长URL中。有关这方面的更多讨论,请参阅问题设计RESTful GET API和一长串查询参数。

如本答案所述->不同浏览器中URL的最大长度是多少?url的允许长度取决于浏览器和服务器的组合。因此,很难说url的确切长度。答案建议url中的字符数保持在2000以下。我不知道为什么你的查询字符串这么长。你能把它缩短吗?如果不了解解决方案和查询字符串的更多信息,很难向您提供任何建议。

通常,Url有自己的长度限制,如果设置此值,可能会在一段时间内解决问题,但请记住,对于长Url情况,最佳实践是使用表单。具体来说,最好使用POST操作而不是Get。

只是为了补充,如果您尝试使用大量参数,请使用Request ajax并接收de 414 ERROR。将dataType属性更改为JSON,然后作为POST类型提交。这解决了我的问题。