客户有时会Content-Length: 0
在提交表单时发送POST请求(10到40多个字段).
我们使用不同的浏览器和不同的位置对其进行了测试,但无法重现错误.客户正在使用Internet Explorer 7和代理.
我们让他们让他们的系统管理员从他们这边看问题.没有代理等运行一些测试..
与此同时(半年后仍然没有回答)我很好奇是否其他人知道有关Content-Length: 0
请求的类似问题.也许来自一些Windows网络内部的大型公司的特殊代理.
Internet Explorer 7是否存在已知问题?有代理系统吗?Windows网络本身?
Google仅在NTLM(以及此类)身份验证的上下文中显示了某些内容,但我们并未在Web应用程序中使用此功能.也许这是代理在Windows登录的客户网络中运行的方式?(我不是Windows专家.只是猜测.)
我没有关于基础设施的进一步信息.
更新:在2010年12月,可以通知一位管理员这个,包括.来自这里答案的链接.联系是因为代理引起的另一个问题.从那以后没有反馈.并且错误消息仍然存在.我笑着阻止我哭泣.
更新2:这个问题自2008年中期以来就存在.每隔几个月客户就会生气,并希望尽快修复.我们再次向他们发送所有旧电子邮件,并要求他们联系他们的管理员以修复它或进行一些进一步的测试.在2010年12月,我们能够向1位管理员发送一些信息.没有反馈.问题没有解决,我们不知道他们是否尝试过.2011年5月,客户再次写信并希望修复此问题.自2008年以来拥有所有信息的同一个人.
感谢所有的答案.你帮助了很多人,正如我从这里的一些评论中看到的那样.太糟糕了现实世界对我来说是怪诞的.
更新3: 2012年5月,我想知道为什么我们没有收到另一个要求解决这个问题(见更新2).查看错误协议,该协议仅在每次发生时报告此单个错误(大约每天15个).它在2012年1月底停止了.没有人说什么.他们必须在网络上做点什么.现在一切都好.从2008年夏天到2012年1月.太糟糕了,我无法告诉你他们做了什么.
更新4: 2015年9月.该网站必须收集一些数据并将其发送到客户的主网站.有一个帐户的API.每当出现问题时,他们都会联系我们,即使问题明显存在于另一方面.几周以来,我们无法向他们发送数据.该帐户不再可用.他们有重新启动,我找不到使用我们网站数据的页面了.错误报告没有回答,没有人投诉.我猜他们刚刚结束了这个项目.
更新5: 2017年3月.API在2015年夏天停止工作.客户似乎继续为该网站付费,并且仍在2017年2月访问它.我猜它们将它用作存档.他们不再创建或更新任何数据,所以这个bug可能不会在2012年1月的神秘修复之后重新出现.但这可能是别人的问题.我走了.
如果Internet Explorer从经过身份验证的站点(NTLM)发布到未经过身份验证的站点(匿名),则不会发送表单域.
这是challange-response情境(NTLM-或Kerberos-安全网站)的功能,IE可以预期第一个POST请求会立即导致HTTP 401 Authentication Required响应(包括挑战),并且只有第二个POST请求(其中包括对挑战的回应)实际上将被接受.在这些情况下,由于性能原因,IE不会上传可能较大的请求正文和第一个请求.感谢EricLaw在评论中发布了一些信息.
每次从NTLM身份验证(即Intranet)页面到非身份验证(即Internet)页面进行HTTP POST时,或者如果未经身份验证的页面是框架集的一部分,其中框架集页面已通过身份验证,则会发生此行为.
解决方法是使用GET请求作为表单方法,或者确保在新的选项卡/窗口(收藏夹/链接目标)中打开未经验证的页面,而不使用部分验证的框架集.只要整个窗口的身份验证模型一致,IE就会再次开始发送表单内容.
绝对相关:http://www.websina.com/bugzero/kb/browser-ie.html
可能相关:KB923155
完整说明:IEInternals博客 - 挑战 - 响应身份验证和零长度帖子
这很容易在服务器端使用MS-IE和NTLM身份验证过滤器进行重现.我对XP-SP2上的JCIFS(1.2.),struts 1.和MS-IE 6/7 也有同样的问题.它终于得到了修复.有几种解决方法可以弥补这一点.
将表单方法从POST(struts默认设置)更改为GET.对于大多数小尺寸表单,它运行良好.不幸的是,我可能有超过50条记录要在HTTP流中发送回服务器端.IE的GET URL限制为2038字节(不是参数长度,而是整个URL长度).所以这是一个快速的解决方法,但不适用于我.
在执行POST操作之前发送GET.这在MS-KB中被推荐.我的项目有许多遗留程序,我不会在合适的时间承担风险.我从来没有尝试过这个,因为根据我对MS-KB的理解,当过滤层收到GET时仍需要一些额外的身份验证处理,我不想改变其他浏览器的行为,例如Firefox,Opera.
检测POST是否以零内容长度发送(您可以从您的框架的头属性哈希结构中获取它).如果是这样,通过从DC或缓存获取质询代码来触发NTLM身份验证周期并期望NTLM响应.当收到NTLM type2 msg且会话仍然有效时,如果POST内容长度不为零,则不需要对用户进行身份验证,只需将其转发到预期的操作即可.顺便说一下,这会增加网络流量.因此,在应用更改plz之前,请检查缓存生命周期设置和SMB会话soTimeOut配置.或者,更简单的说,您可能只是向MS-IE发送401未授权状态,浏览器将发回POST请求以及回复数据.
MS-KB提供了一个KB-923155的热修复程序(由于声誉数量很少,我无法发布多个链接:{),但它似乎无法正常工作.有人会在这里发布一个可行的热修复程序吗?谢谢:)这是一个参考链接,http://www.websina.com/bugzero/kb/browser-ie.html
我们的系统上有一个客户遇到完全相同的问题.我们已将其指向代理/防火墙.微软的IAS.它正在剥离POST主体并发送内容长度:0.然而,我们可以做很多事情,并且想要使用GET请求,因为这会在URL字符串上公开用户名/密码等.在我们的系统上有近7,000个用户,只有一个有问题...也只有一个使用Microsoft IAS,所以必须是这样.