【问题标题】:HTTP Error 400 : The request verb is invalid in IIS 8.5HTTP 错误 400:请求动词在 IIS 8.5 中无效
【发布时间】:2015-03-19 15:38:11
【问题描述】:

我在 Windows Server 2012 R2(IIS 版本 8.5.9600.16384)中托管了 ASP NET 4.5 应用程序。但是偶尔我会收到一个错误,比如 Bad Request - Invalid Verb HTTP Error 400。从一个页面转到另一个页面时,请求动词无效。没有出现此错误的特殊顺序或特定页面。

httperr 日志文件向我显示类似

的错误
2015-01-21 04:48:18 MyIP 55452 ServerIP 80 - - - 400 - Verb -
2015-01-21 04:48:20 MYIP 55454 SerevrIP 80 - - - 400 - Verb -

我查看了这篇帖子http://support.microsoft.com/kb/828726,但这里它适用于 Microsoft Internet Information Services (IIS) 6.0。我也可以为 iis 8.5 做这个修补程序吗?我在互联网上搜索过这个问题,但无法获得大量信息。那么,谁能帮我解决这个问题。

使用 Fiddler 我得到了请求的原始数据

POST http://example.com/Project.aspx?prj=5566 HTTP/1.1
Host: example.com
Connection: keep-alive
Content-Length: 30634
Cache-Control: max-age=0
Authorization: Negotiate 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: http://example.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: http://example.com/Project.aspx?prj=5566
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8
Cookie: ASP.NET_SessionId=4oymd5odmcaluiuzc24tbx22; _gat=1; _ga=GA1.2.1888408676.1418017144

Windows Server 2012 R2的请求过滤设置为

任何帮助将不胜感激。

【问题讨论】:

  • 通过在您的 httperr 日志中添加额外的字段(例如请求 url),您可以找到来自哪部分代码的请求。
  • 有点晚了,但由于这篇文章有很多观点,我在这里提出这个建议:在stackoverflow.com/questions/35654199/… 提出的案例中,问题是由无效的cookie引起的。它可以解释这个问题。清除所有 cookie 可能会解决。
  • @Gopesh Sharma,你能解决这个问题吗?我面临着完全相同的问题。清除 cookie/更新浏览器无济于事。这只发生在 Chrome 上。
  • 我也有同样的问题。一样的环境。 Windows Server 2012 R2(IIS 版本 8.5.9600.16384)Chrome/52.0.2743.116。我也有相同的 IIS 设置。 IE 运行良好。清理 cookie 或缓存的问题不会消失。

标签: asp.net iis httpverbs


【解决方案1】:

尝试添加

EnableViewState="false"

到您的 aspx 页面。看起来 Chrome 添加了 IIS 期望请求动词的视图状态。

你可能会有一些运气:Fix HTTP.sys

【讨论】:

    【解决方案2】:

    400 状态码

    400 状态表示“错误请求”。所以这不是服务器端的问题。请求有问题。在到达 IIS 之前格式不正确

    如果子状态代码不是 0,则更容易排除故障。例如,如果为 1,则表示“无效的目标标头”。如果它是 2,那将意味着“无效的深度标题”。这是full list of status codes

    如果您在 sc-win32-status 中看到值 64,则表示存在与网络相关的问题。它指的是“指定的网络名称不再可用”。发送响应后,IIS 等待来自客户端的 ACK 包。如果客户端重置连接而不是发送此包,则 IIS 会记录 64 代码,因为它不是正常关闭连接。

    检查 HTTPERR 日志是否有相同的时间戳。就我而言,我看到 Timer_EntityBody 错误,这意味着“连接在请求实体到达之前已过期”。

    建议

    • 检查是否有杀毒软件或网络端点等软件 服务器中的保护。卸载它们并监视系统 同时查看问题是否再次发生(注意:禁用它们 有时并不意味着它们不再在后台运行。 卸载是从 故障排除过程)

    • 与第三方产品支持合作 查看是否有任何东西阻止请求完全发送。 应用程序可能正在启动连接但未完成它

    • 与您的网络团队联系,以分析网络之间的网络 Web 服务器和客户端。理想情况下,网络跟踪会很有帮助

    来源:Status Code 400 with 64 in sc-win32-status column

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-11
      • 1970-01-01
      • 1970-01-01
      • 2014-12-11
      • 1970-01-01
      • 2019-05-10
      • 2019-11-30
      • 1970-01-01
      相关资源
      最近更新 更多