我有 2 台服务器(使用 Windows Server 2003),它们使用 .Net 远程处理进行通信。由于某些架构原因,我在这两台服务器之间有一个代理,它会从一台服务器发送到另一台服务器的请求中删除“Expect: 100-continue”标头。问题是,当代理将消息发送到没有此标头的第二台服务器时,目标服务器会以“100 continue”响应。这种行为给我们带来了很多问题,因为当代理收到“100 continue”时,它会丢弃整个 http 对话。我在 Google 上搜索了这个问题,发现 Windows Server 2003 SP1 中有一个错误,应该在 SP2 中修复,但在我安装它之后,问题仍然存在。有人知道如何修复它,或者配置 http.sys 不发送“100 continue”吗?
答案1
尝试强制 http/1.0 通信[通过重新配置代理、更改客户端代码或 http 服务器配置]。这会降低性能[例如如果您使用 keep-alive] 但应该可以解决问题。
答案2
许多代理服务器都使用 HTTP 1.0。当两端的软件尝试使用 1.1 功能时,事情就开始变得疯狂。
在一些需要协商的情况下,客户端和服务器都可以同意 1.1 是正确的协议(代理服务器假装遵循)。然后,当 1.1 级通信真正发生时,代理服务器会删除它不理解的内容。
从客户端切换到 1.0 通常是获得可靠结果的最简单方法。
如果您使用的是 Web 服务,则可能需要辅助类来修改请求。如果您正在这样做,我会查找一个示例。