我们的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数据?
答案 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回复中包含哪些标题?