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,详细说明了我的确切问题以及如何抑制错误。
但是,当然,我想首先了解为什么会出现此错误。以下是一些事实: -
为了缩小问题范围,我创建了一个可以复制问题的最简单的页面。幸运的是,这并不太难。然后,我使用Fiddler检查了标头中的字节,但是我找不到出现没有LF(0x0A)的CR(0x0D)。
原始HTTP响应(由Fiddler通过响应保存字节存储 - 因此在保存期间不应更改其编码)如果您不相信我,则为here as text!
所以现在我认为所谓的错误可能是误报。有没有其他人有这方面的经验/可以帮助解决问题?
答案 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” 协议违规错误“异常。
如果现在有所帮助并稍后发布结果
将会尝试