HttpResponse正在改变身体

时间:2012-10-11 10:15:46

标签: java linux web-services http firewall

目前我们正面临着一个特殊的问题,我们不知道是什么导致了这一问题。

我们在serverA上托管了一个Web服务。 当从serverB调用此Web服务时(使用命令curl http://serverA:8008/service/getId),我们将获得所需的响应。 (Web服务返回一个整数的Id。)

当从serverC调用相同的Web服务时,我们会得到所需的响应,但响应中的数字 2 将被 _ 替换。

例如,当从serverB调用Web服务时,我们得到 5002 。 当从serverC调用相同的Web服务时,我们得到 500 _

我们从serverA检查了wireshark的详细信息,从serverA发出的数据对于两台服务器都是相同的。

目前我们不知道为什么会这样。我想补充一点,serverC在DMZ中,而serverB不在。

高度赞赏这方面的任何意见/建议。

6 个答案:

答案 0 :(得分:1)

收集事实

 1. Server doesn't change the response by its own.
 2. Web Service is giving the same response for the same input.

只有罪魁祸首是您的防火墙,您可以将其停止以进行测试,并查看响应是否按预期进行。要么 尝试检查防火墙设置并为Web服务创建漏洞/例外。

答案 1 :(得分:1)

感谢大家的努力,问题现在得到了解决。导致这种情况的防火墙规则不正确。我问网络工程师防火墙设置如何改变http响应体,以下是我得到的答复:

  

对于某些协议,防火墙会进行深层数据包检查,   所以不要只检查它实际看到的端口号   有效载荷。这允许它阻止可能的恶意软件,格式错误的数据包   利用漏洞等。所以它知道要检查什么   你必须在规则中指定流量是什么,所以你说它是   在端口8008上,它是HTTP。问题在于出于某种原因   规则已设置为使用端口8008,但流量类型设置为   被动模式FTP而不是HTTP。一旦我将其更正为HTTP,它   开始工作了。

答案 2 :(得分:0)

尝试将ServerB放入DMZ中,看看会发生什么 如果它的行为与网络问题相同。
如果不是,您可能在服务器上有2个不同版本的代码。

答案 3 :(得分:0)

这听起来像你在URL中有特殊字符,它们会导致覆盖端口号,但只有在字符集中识别出字符时才会这样。您是否可以使用十六进制编辑器检查特殊字符的URL(特别是退格)?

答案 4 :(得分:0)

我无法解决您的问题,但在路径上寻找任何转码器。 从服务器C向服务器A发送请求。 1)在A处的wireshark,以查看它是否正确接收请求。一个可能的代码转换器可能会将无主机的url转换为host-ful(GET / service / getId到GET http:// serverA:8080 / service / getId),或者可能会丢弃主机头等。但如果你看到没有错,请继续第2步。

2)B处的wireshark,看看响应是否有效。查看Content-Type是否设置正确。如果设置正确,仍然受到操纵,请尝试添加标头Cache-Control:no-transform。许多代码转换器都尊重这一点。如果这也失败了,并且无法删除任何可能的代码转换器,病毒,您可能会转到第3步。

3)只要去https,就可以免受这些事情的影响。

答案 5 :(得分:-2)

这是Apache的一项功能,旨在隐藏部分HTTPresponce。 我没有立即看到修复,现在没有时间看。我稍后会尝试编辑一个。

如果您想尝试查找,请参阅文档的链接:http://xianshield.org/guides/apache2.0guide.html

使用[Ctrl] + [F]查找此语句(不带qoutes)“配置并构建Apache服务器”