目前我们正面临着一个特殊的问题,我们不知道是什么导致了这一问题。
我们在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不在。
高度赞赏这方面的任何意见/建议。
答案 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服务器”