【问题标题】:HTTP Error 414. The request URL is too long. asp.netHTTP 错误 414。请求 URL 太长。网
【发布时间】:2014-06-07 21:17:32
【问题描述】:

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

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

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

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

【问题讨论】:

  • 是否可以用整数或 Guid 替换 url 中的一些长字符串?如果 url 中有任何来自有限列表的长字符串变量,那么像这样的某种映射可能允许您缩短 url?

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


【解决方案1】:

此错误实际上是从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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 但是只有 GET 请求可以被收藏。在 web.config 中也设置了上述值后,问题也没有解决。
      • 你可以做到这一点的方法是 URL-Shortening,这与 twitter、google 等大型应用程序中的方法相同。为此,您应该考虑一个数据库表并存储所有详细参数,并将行的 id(主键)反映给用户以添加书签。此外,您应该设计一个页面来处理和解析捕获的 id(来自 request.QueryString)......希望这个解决方案能解决您的问题
      • @Midhun :- 或者你可以做的其他事情是 - 创建一个只包含 get 的类;并设置;财产。将您想要的值分配给此类属性,然后根据您的要求在 ViewStateSession 中添加此类,并在您的应用程序中使用它。所以你不需要将大量数据传递到查询字符串中。希望这对您有所帮助。
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多