我无法通过HTTP POST请求将XML数据从特定客户端发送到特定服务器。我该如何调试?

时间:2011-03-28 11:26:01

标签: linux networking

我正在使用Java程序将一些XML数据从远程客户端计算机发送到我们的服务器。我已经独立检查了整个系统的各个组件,并发现:

  1. 客户端能够成功获取对同一服务器的GET请求的响应。因此可以排除与名称解析相关的问题。
  2. 其他网络中的客户端代码能够将数据POST到我们的服务器。所以,服务器代码工作正常。
  3. 尝试将相同数据从同一客户端发送到不同的服务器成功。此外,其他网络中的系统运行相同版本的客户端。因此,客户端代码也可以运行。
  4. 我尝试使用以下方法通过CURL发布XML文件:      
    curl --header 'content-type: text/xml;charset=UTF-8' --data @5.xml -X POST http://myserver.com/updates
    但那也挂了。所以,我得出结论,问题不在于Java部分,而在于网络本身。
  5. 执行netstat -ntavp会显示以下输出:
        
        Active Internet connections (servers and established)
        Proto Recv-Q Send-Q Local Address           Foreign Address         State
        tcp6       0   6250 192.168.1.50:32771      www.xxx.yyy.zzz:80      ESTABLISHED
        
        并且客户端系统长时间保持此状态,显示在发送队列中等待几千个字节。我已经同时检查了服务器日志,并且没有等待在那里读取的字节。状态也显示为ESTABLISHED,因此我必须得出结论,TCP握手很顺利。我有点被困在这里。

我还可以在哪里找出造成这个问题的原因?客户端和服务器上的操作系统都是Ubuntu 10.04

更新 显然,问题不仅限于HTTP帖子。我将请求的XML部分转储到一个文件中,并尝试使用FTP和SCP将其复制到服务器。这两次尝试都失败了。所以,目前的情况是:

  1. 客户端能够将请求和文件发送到其他服务器。
  2. 服务器能够处理来自其他客户端的HTTP请求和文件上载。
  3. 文件实际上是从客户端传输到服务器的,但连接似乎没有被关闭。
  4. 我使用tcpdump捕获了服务器上的数据包,发现源自服务器的某些数据包的校验和不正确。

更新2 当我遇到http://www.ethereal.com/faq.html#q11.1时,请忽略有关校验和的更新,并验证客户端确实正在接收具有正确校验和的TCP数据包。

1 个答案:

答案 0 :(得分:0)

根据this question的答案中的建议,将MTU设置为1400,即可解决问题。

虽然这两个问题最初看起来有所不同,但根本原因却是相同的。