3

我们目前正面临一个特殊的问题,我们不知道是什么原因造成的。

我们在 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 不在。

非常感谢这方面的任何输入/帮助。

4

6 回答 6

1

通过收集事实

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

唯一的罪魁祸首是您的防火墙,您能否将其停止以进行测试并查看响应是否按预期进行。或尝试检查防火墙设置并为 Web 服务创建漏洞/异常。

于 2012-10-23T04:02:34.943 回答
1

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

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

于 2012-10-23T10:05:50.553 回答
0

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

于 2012-10-22T09:36:02.330 回答
0

在我看来,这听起来像是您的 URL 中有特殊字符,它们会导致端口号被覆盖,但前提是这些字符在字符集中被识别。您可以使用十六进制编辑器检查 URL 中的特殊字符(特别是退格)吗?

于 2012-10-22T17:02:05.083 回答
0

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

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

3)只要去https,它对这些东西免疫。

于 2012-10-23T03:26:41.010 回答
-2

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

如果您想尝试找到它,这里是文档的链接:http: //xianshield.org/guides/apache2.0guide.html

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

于 2012-10-18T14:45:52.943 回答