缺少代理服务器的POST参数

时间:2011-04-01 14:09:36

标签: proxy http-post

我们的Web应用程序遇到了一些奇怪的行为。有些POST请求没有任何http正文。 content-length为0.根本没有post参数。我们在我们的负载均衡器上跟踪网络流量,我们发现我们没有得到任何请求机构的一些POST请求。

所有损坏的POST请求都有共同点,它们是通过代理服务器到达的。

我们已经在SO上找到了这个问题: Why "Content-Length: 0" in POST requests?

我们现在正在使用帧转义javascript例程,它有点帮助。似乎错误率下降。但是我们仍然有POST请求没有数据,这些数据在我们的webapp中永远不会发生。这些请求不是来自黑客或类似的。

我们经常看到webwasher作为代理。但大多数时候我们都没有看到使用了哪种代理。

在本PDF中,我们看到了关于使用webwasher缺少POST参数的评论

WebWasher - Transparent Authentication Guide

  

关于一些陷阱的说明

     

请注意,在设置透明身份验证时必须考虑一些缺陷:

     

如果ICAP服务器将重定向发送到身份验证服务器,则POST请求将失败。但是,这仅影响映射的更新,因为对于浏览器,请求成功,并且在最终重定向后将不再发送POST正文。

我们想知道除了仅使用GET而不是POST之外是否还有其他解决方法。 如果其他网站在丢失POST数据时遇到问题以及他们做出了哪些结论,我们也会在这里。

是否还有其他原因导致未发送POST数据?

3 个答案:

答案 0 :(得分:2)

我遇到过微软代理服务器在网络请求方面表现不佳的问题。

我不得不求助于强制HTTP / 1.0并将KeepAlive属性设置为false。

NTLM身份验证的工作原理会导致身体偶尔发送。

我已将此添加到我的许多网络请求中

protected override WebRequest GetWebRequest(Uri uri)
{
    HttpWebRequest webRequest = (HttpWebRequest) base.GetWebRequest(uri);

    webRequest.KeepAlive = false;
    webRequest.ProtocolVersion=HttpVersion.Version10;
    return webRequest;
}

希望这有帮助!

答案 1 :(得分:0)

我猜不是真正的答案,但我来到这里是因为我们遇到了类似的问题。最初,我们认为这是由于客户端是移动的,因为这是一个共同的主题,但我们现在已经意识到共同点是代理。

我们现在提出了一个http 400。

以下是一些代理,我们遇到过问题。张贴他们带领休闲的​​Google员工:

  • 1.1 ACISA02S, 1.1 abc:3328 (squid/2.6.STABLE21)
  • 1.1 ipcop00.cat.local:8000 (squid/2.6.STABLE21)
  • 1.1 PRXTGLSRV01
  • 1.1 ISA

答案 2 :(得分:-1)

没有符合spec的内容:

  

某些HTTP方法必须导致缓存使实体无效。   ...   POST

(HTTP / 1.0规范声明'应用程序不得缓存对POST请求的响应')。

但是那里有很多编写错误的代码。

您对网址上的POST回复中包含哪些标题?