在 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
【讨论】:
我也必须设置这个:似乎 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 中,在不影响其他用户的情况下进行昂贵操作的正确方法是啥?
剑道 DropDownListFor() 与 ASP.NET-MVC