AJAX POST 失败-客户端发送 RST 响应...为什么?

AJAX POST 失败-客户端发送 RST 响应...为什么?

问题

我们有一个 Web 应用程序,有成千上万的用户在使用。但是,自 2020 年 1 月下旬以来,一小部分客户(但数量仍然很大)报告了类似的问题。

  • 无法执行 AJAX POST (application/json)
  • 能够执行 AJAX GETS
  • 能够执行 AJAX POSTS (application/x-www-form-urlencoded)
  • 不依赖于特定的浏览器
  • 影响客户端网络中的所有用户

Web 方法(ASP.NET MVC)不需要对用户进行身份验证,也不需要 HTTPS。

客户分析

使用 Google Chrome 的“网络”选项卡,我们将数据捕获为 HAR 文件。对于被阻止的请求,我们看到:

"timings": {
    "blocked": 0.06441399999312125,
    "dns": -1,
    "ssl": -1,
    "connect": -1,
    "send": 0,
    "wait": 0,
    "receive": 0,
    "_blocked_queueing": -1
},

我将其解释为,这必须等待其他 AJAX 调用完成(它被阻止)但它从未发送请求。

Web服务器分析

我们在网络服务器上安装了 WireShark,并在记录 HAR 文件的同时捕获了流量。

客户(来源)被描述为思科。

对于失败的请求,我们看到以下帧:

1. Client->Server: 18497 -> 80 [SYN, ECN, CWR] 
2. Server->Client: 80 -> 18479 [SYN, ACK, ECN] 
3. Client->Server: 18497 -> 80 [ACK]
4. Client->Server: 18497 -> 80 [RST, PSH, ACK]

前三帧看起来与成功的 Posts 非常相似,但在这里我们得到客户端返回 [RST,PSH,ACK],而成功的则没有。

我看了一下 2. (服务器->客户端),对于成功和失败的情况,这些看起来非常相似,尽管我承认我是一名.NET 软件开发人员,并且对 TCP 级别不太熟悉......

调查来自客户端的 [RST、PSH、ACK],我确实在标志部分下看到以下内容:

[Expert Info (Warning/Sequence): Connection reset (RST)]
    [Connection reset (RST)]
    [Severity level: Warning]
    [Group: Sequence]
.... .... ..0. = Syn: Not set
.... .... ...0 = Fin: Not set
[TCP Flags: .......APR..]

我不知道是什么原因导致这个请求被终止:这是我们在服务器/负载均衡器/防火墙上做错的事情导致客户端重置连接,还是客户端配置不正确?

相关内容