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

时间:2014-04-23 07:22:13

标签: c# asp.net asp.net-mvc iis web-config

我收到错误" HTTP错误414.请求网址太长。"从以下文章中,我了解到这是由于查询字符串非常长:

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

  1. 在web.config中,我有maxQueryStringLength="2097151"。这是最大值吗?
  2. 为了解决这个问题,我应该在web.config中设置maxUrl吗?如果是,那么支持的最大值是什么?
  3. 我该怎么做才能解决此错误?

4 个答案:

答案 0 :(得分:5)

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

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

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

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

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

作为使此更改绕过http.sys安全性的替代方法,请考虑将请求更改为接受HTTP POST而不是HTTP GET,并将参数放入POST请求正文而不是长URL。有关此问题的更多讨论,请参阅问题Design RESTful GET API with a long list of query parameters

答案 1 :(得分:3)

如本回答所述 - > What is the maximum length of a URL in different browsers? URL的允许长度取决于浏览器和服务器的组合。因此,很难准确地说出网址的长度。答案建议在网址中保持低于2000字符。我不知道为什么你的查询字符太长了。你能缩短吗?如果不了解有关解决方案和查询字符串的更多信息,很难给出任何建议。

答案 2 :(得分:0)

通常,Url有自己的长度限制,如果设置此值,您可以暂时解决问题,但请记住,对于长URL情况,最佳做法是使用表单。具体而言,最好使用POST操作而不是Get。

答案 3 :(得分:0)

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