团队测试:失败负载。请求失败:服务器提交了协议违规。 Section = ResponseHeader Detail = CR必须后跟LF

时间:2011-01-24 19:56:30

标签: visual-studio load-testing

QA部门的人员使用Visual Studio团队测试(2008 IIRC)对我们的Web应用程序运行负载测试。

最新一组测试在几页上都失败了。报告的错误是

Request failed: The server committed a protocol violation. Section=ResponseHeader Detail=CR must be followed by LF

使用谷歌搜索这个产生了不少结果。看起来这个错误消息是从.Net框架WebRequest类生成的(即它不是视觉工作室特定的消息)。最实用的结果是this one,详细说明了我的确切问题以及如何抑制错误。

但是,当然,我想首先了解为什么会出现此错误。以下是一些事实: -

  • 当针对较旧版本的Web应用程序运行测试时,此错误从未发生过。网络应用程序。主机操作系统和Web服务器(Win 2003和IIS 6)在两种情况下都是相同的。
  • 并非所有页面都会产生此错误 - 只有一些。
  • 对这些页面(我能想到的)唯一重要的改变是他们现在使用了一些AJAX,而他们之前没有(IIRC)

为了缩小问题范围,我创建了一个可以复制问题的最简单的页面。幸运的是,这并不太难。然后,我使用Fiddler检查了标头中的字节,但是我找不到出现没有LF(0x0A)的CR(0x0D)。

原始HTTP响应(由Fiddler通过响应保存字节存储 - 因此在保存期间不应更改其编码)如果您不相信我,则为here as text

所以现在我认为所谓的错误可能是误报。有没有其他人有这方面的经验/可以帮助解决问题?

1 个答案:

答案 0 :(得分:1)

这绝对不是误报 - 在尝试与Facebook API通信时,我的应用程序中出现了很多错误。

我只是偶然发现了 Steven Cheng - http://www.velocityreviews.com/forums/t302174-why-do-i-get-the-server-committed-a-protocol-violation.html的回复 - 让我引用他的话:

  

根据您的描述,您正在使用   要发送的HttpWebRequest组件   一些http请求到一些外部网站   ASP.NET Web中的资源   应用。但是,你永远都是   得到“服务器承诺了   协议违规。   Section = ResponseStatusLine“错误   除非您设置以下部分   在web.config文件中:

<system.net>
<settings>
<httpWebRequest useUnsafeHeaderParsing="true" />
</settings>
</system.net>
  

你想知道这种行为的原因,对吗?

     

至于这个问题,我已经完成了一些   对此研究并发现了   问题实际上是由   关键的http标头   解析/验证   HttpWebRequest组件。根据   Http规范(http.1.1),.   特别是HTTP标头密钥   不要在其名称中包含任何空格。   但是,某些Web服务器并不完全   尊重他们的意图。   在Dotnet上运行的应用程序   框架和大量使用http   请求通常使用   httpWebRequest类,其中   封装了面向Web的一切   开发商可以梦想。随着所有   最近与安全有关的问题,   “httpWebRequest”类提供了一个   自我保护机制预防   它接受HTTP答案而不是   完全符合规格。

     

常见的情况是有一个空间   “content-length”标题键。该   服务器实际上返回一个“内容   长度“键,假设没有空格   被允许,被认为是   攻击向量(HTTP响应拆分   因此,触发“HTTP”   协议违规错误“异常。

如果现在有所帮助并稍后发布结果

将会尝试