在 StackOverflow 上,我们每天都会看到一些“请求超时”异常。
事实:
- 请求超时默认为 90 秒
- 仅出现在 POST 上
- 发布的数据是文本,通常很小 (< 1KB),但范围可以达到几 KB
- 服务器变量中未捕获任何表单数据
- 客户端 UA 多种多样:IE5.5 - 7、Firefox 3.0.5、iPhone、Chrome
- 客户所在地多种多样:英国、法国、美国 - 北卡罗来纳州、俄亥俄州、内布拉斯加州、印第安纳州
我们测试了基于服务器的超时(即使用 Thread.Sleep),并且在异常日志中所有表单变量都被正确捕获 - 这使我们相信客户端在发送在规定的时间内提出请求。
任何关于如何捕获/调试这种情况的想法都非常受欢迎!
最佳答案
我在使用小型 AJAX Web 服务的生产服务器上也遇到了同样的问题。在防火墙外进行数据包捕获后,我们发现服务的 POST 分为两个 TCP 段,而第二个段从未到达我们手中。 (第一个数据包仅包含 header ,第二个丢失的数据包应该是 json 正文)所以基本上 IIS 只是坐在那里等待 POST 的其余部分。配置的超时后,服务器向客户端发送 RST 数据包并记录“请求超时”错误 - 这是正确的行为。
我们试图获得客户端重现,但运气不佳,但在我们的例子中,这似乎完全与网络相关(或者可能是某些不喜欢帖子内容的“安全”软件)。
关于asp.net - 诊断 "Request timed out"HttpException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/441792/