c# - HTTP 错误 414。请求 URL 太长。网站

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

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

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

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

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

最佳答案

这个错误实际上是从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 .

关于c# - HTTP 错误 414。请求 URL 太长。网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23237538/

相关文章:

c# - xml注释中的回车或换行

c# - 我该如何解决此错误 :"Column ' ASSET' 不属于表。”?

c# - 如何在需要用户登录的 ASP.Net 页面中使用 wkhtmltopdf

c# - 替代 web.config 中的 appsettings(需要持久性)

c# - 两个线程上交错进程

C# 在运行时更改类方法

jquery - 什么是 tGrid?

c# - 当用户按下 Enter/Return 键时调用服务器端操作

c# - 根据 GET 请求为 ASP.NET MVC 自定义模型绑定(bind)器

c# - 如何在通过 QuickBooks Online API 添加客户之前检查客户是否存在?