在 asp.net-mvc 中,查询字符串太长会导致 404 File not found 错误吗?

Posted

技术标签:

【中文标题】在 asp.net-mvc 中,查询字符串太长会导致 404 File not found 错误吗?【英文标题】:In asp.net-mvc, would a querystring too long result in 404 File not found error? 【发布时间】:2015-04-25 05:22:54 【问题描述】:

我有一个 asp.net-mvc 站点,我有一个案例,我的 URL 中有一个很长的查询字符串。这以前不是问题,但在某些情况下我突然收到此错误:

404 - 找不到文件或导向器 - 您要查找的资源可能已被删除、更改名称或暂时不可用。

我还没有证明它是由于 url 长度造成的,但我假设这与查询字符串的长度有关的原因是,如果我选择删除查询字符串的某些部分,它可以正常工作,并且我已经浏览了每个部分(识别部分查询字符串是“损坏的”

我能够在总 url 长度为 2805 个字符的示例中重现此错误。这是预期的吗?我在 Firefox 和 Internet Explorer 中都发现了这个问题。

我问的原因是,从我的谷歌搜索来看,当查询字符串太长时,IIS 似乎会引发不同的错误(415 或 414 错误as described here)

这是在服务器端设置的吗?在 web.config 中?

【问题讨论】:

在 IIS 和 Datatables 上运行的 Django 遇到了完全相同的问题,进行约 3500 个字符的 ajax 查询。由于您的帖子,将限制设置为 5000 解决了它,但我希望错误消息提供更多信息。 【参考方案1】:
<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxQueryString="xxxx"/>
    </requestFiltering>
  </security>
</system.webServer>

http://www.iis.net/ConfigReference/system.webServer/security/requestFiltering/requestLimits

https://msdn.microsoft.com/en-us/library/e1f13641(v=vs.100).aspx

【讨论】:

我也必须设置这个: 打开自己的攻击。当有人使用 99,999 个查询字符串参数发送一堆请求时,您的服务器需要多长时间才能响应?【参考方案2】:

似乎 IIS 为非常长的查询字符串抛出了非标准的 404.15 错误代码。这可能被默认错误处理程序所掩盖,实际错误被映射到裸 404 错误。

阅读本文了解详情: http://www.iis.net/configreference/system.webserver/security/requestfiltering/requestlimits

【讨论】:

这是我的问题。我没有收到 404.15 错误,只是上面的一般错误 由于默认的 customErrors 设置为 RemoteOnly,大多数情况下您可以在 localhost 上按原样捕获这些错误。您还可以尝试使用几种方法禁用 IIS 错误页面。见here, here, and here【参考方案3】:

每MSDN:

当请求过滤因为 HTTP 请求超出请求限制而阻止 HTTP 请求时,IIS 7 将向客户端返回 HTTP 404 错误并记录以下 HTTP 状态之一,并带有唯一的子状态,该子状态标识请求被执行的原因拒绝:

| HTTP    | Substatus Description     | 
|---------|---------------------------|
|  404.13 | Content Length Too Large  |
|  404.14 | URL Too Long              |
|  404.15 | Query String Too Long     | 

仅供参考 - 2048 通常被认为是 URL 长度的最高跨浏览器限制。

【讨论】:

以上是关于在 asp.net-mvc 中,查询字符串太长会导致 404 File not found 错误吗?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET-MVC中Entity和Model之间的关系

在 asp.net-mvc 中,在不影响其他用户的情况下进行昂贵操作的正确方法是啥?

asp.net-mvc:js文件中的剃刀'@'符号

剑道 DropDownListFor() 与 ASP.NET-MVC

在 asp.net-mvc 中从服务器读取文本文件的最佳方法是啥

在 .NET 中开发新的 RESTful Web 服务——我应该从哪里开始? ASP.NET-MVC,WCF?