【问题标题】:Content Length of HTTP Request > body sizeHTTP 请求的内容长度 > 正文大小
【发布时间】:2023-03-10 01:23:01
【问题描述】:

我正在管理一个网站,该网站在过去几个月通过使用 MVC 3.0 ASP.net 构建的 IIS 7.5 运行良好。当我们的 AJAX POST 请求(通过 jQuery 触发)失败时,我们时不时会遇到问题,因为正在发布的 JSON 被截断。

到目前为止,我们发现对于所有此类请求,请求的“Content-Length”标头包含的数据比我们实际在请求中获得的数据多。

我们已经在 web.config 中将 ma​​xRequestLength 设置为 51200,并且我相信 ma​​xAllowedContentLength 的值具有相当大的默认值(我们尚未设置在我们的配置中)。我也有一个失败的请求,“内容长度”低至 7301(字节),但我们设法只得到了 2179 个字节。所以我不怀疑这会达到任何限制。

有问题的请求的请求标头如下

  • 缓存控制:无缓存
  • 连接:保持活动状态
  • 编译指示:无缓存
  • 内容长度:7301
  • 内容类型:应用程序/json; charset=utf-8;
  • 接受:application/json, text/javascript, /; q=0.01
  • 接受编码:gzip、放气
  • 接受语言:en-us,en;q=0.5
  • 用户代理:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1
  • X-Requested-With: XMLHttpRequest

有什么想法吗??


更新:我已经能够进一步将问题与我们的代码隔离开来。编写了一个独立的控制器,它接受 JSON 字符串并将其反序列化。如果出现错误,它会记录错误。

当我在 50 个请求的循环中以 150 个并发线程并行访问此控制器时,我会遇到一些故障,其中此控制器接收的 JSON 被截断。现在我们非常专注于优化 IIS 并阅读更多关于可能相关的各种参数(目前我们在 IIS 上使用默认参数运行)。

我强烈认为 150 个并发连接应该没什么大不了的,我真诚地希望调整一些参数我们应该能够解决这个问题。一旦我们解决了这个问题,将分享我的发现。


*更新 2(10 月 8 日)*:我进一步缩小了问题的范围。我在 IIS 中打开错误日志,发现我失败的请求在读取数据时出现以下错误

BytesReceived = 0
ErrorCode = 2147943395
Error Description = "The I/O operation has been aborted because of either a thread exit or an application request.(0x800703e3)"

我正在 iis 论坛上查找有关此错误的信息,但尚未尝试给出(多个)建议。以下链接可以作为搜索更多内容的良好起点

http://forums.iis.net/p/1149787/1917288.aspx

【问题讨论】:

  • 您知道内容被截断的位置吗?它在进行 Ajax 调用之前是否在浏览器中?它是写到 Ajax 调用中的吗?是在 HTTP 传输中吗?它是否发生在某些服务器端脚本中?
  • 感谢大家的回复。 @Mark - 我认为这与 JSON 的大小无关(反序列化时我没有收到最大大小错误)。不幸的是,我不知道数据在哪里被截断。我知道控制器正在截断数据。我也知道大多数情况下发生此问题时,使用的浏览器是 IE 8。我仍在调试中,希望尽快解决此问题 - 将发布我的发现。
  • 更新:我已经能够用 JMeter 重现该问题,但它只显示工作流中有 100 多个并发线程访问服务器。
  • 你可以看看max concurrent connections。这不应该导致截断,但既然你提到它,它可能值得调查。话题小讨论here

标签: asp.net-mvc-3 http jquery iis-7 httpwebrequest


【解决方案1】:

我终于找到了解决方案的原因和解决方法。不幸的是,它不适用于我的所有环境,但有助于生产环境。在下面查找详细信息

这原来是由于 Windows 2008 R2 中的一个错误,它使 asp.net 相信客户端已断开连接,即使它没有。可以在http://support.microsoft.com/kb/977453 找到相同的修补程序。该修复程序已经是 Windows 2008 R2 SP1 的一部分(来自 here)。

虽然该修补程序在一个运行 Windows 2008 R2 的环境中对我有效,但它不能应用于带有 SP1 的 Windows 2008 R2。不幸的是,该问题仍然可以在 SP1 上运行的环境中重现,并且仍未解决。我已在 IIS 论坛上针对此问题在 http://forums.iis.net/t/1192310.aspx 开设了一个新案例,并将改为在那里进行跟踪。

要了解有关此问题的更多信息 - 您可以关注 http://forums.iis.net/p/1149787/1917288.aspx 的主题

【讨论】:

  • 我们遇到了同样的错误,但在 Windows 2008(不是 R2)上。另外,我很困惑,您说“修复程序已经是 Windows 2008 R2 SP1 的一部分”,然后您说“不幸的是,问题仍然可以在 SP1 上运行的环境中重现。” ?
  • 你解决了吗?我有一个非常相似的问题...在 Windows 2008 R2 SP1 上问题仍然存在...在 Windows 2008 R2 上,我应用了修补程序,一切都很好。
猜你喜欢
  • 2018-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
相关资源
最近更新 更多