HttpWebRequestError: 服务器违反了协议。Section=ResponseHeader Detail=CR后必须跟随LF。

19

我创建了一个asp.net示例应用程序,并尝试使用httpwebrequest从我的服务器爬取数据。但是有时我会遇到上面的错误。我在谷歌上进行了一些搜索,但所有结果都说您应该在web.config中添加属性"<httpWebRequest useUnsafeHeaderParsing="true" />"。

由于此属性包含'UNSAFE'单词,所以我非常担心。我无法将其添加到我的网站配置文件中。是否有其他选项可以读取我的抓取URL的响应。请告诉我如何在没有"<httpWebRequest useUnsafeHeaderParsing="true" />"的情况下实现。

提前致谢, Laxmilal Menaria


我曾经看到过一个与同样错误相关的不同案例 - Imperva's Incapsula 缓存机制试图缓存特定响应。因此,Incapsula 没有重定向到真实服务器,而是回复了相同的响应,但某种方式下,头部略有不同,并且不符合 Windows CR-LF (\r\n)。 - itsho
4个回答

26

这肯定是一个服务器问题-- 服务器没有遵循HTTP规范,.NET客户端将其标记为潜在问题。 "不安全"可能有点不准确。这里并没有什么大的安全问题,只是违反了RFC的规定,这很糟糕,但不幸的是并不罕见。

所以,正如你在Google上找到的那样,解决问题的方法是应用以下配置更改:

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

1
如果你不知道在哪里添加这个,可以在解决方案资源管理器中查找 App.config - Krzysztof Bociurko

2
另一个可能性是:在进行POST操作时,服务器以不正确的方式响应100继续信号。
以下方法解决了我的问题:
request.ServicePoint.Expect100Continue = false;

2

调试此问题(并确保是协议违规导致的问题)的一种方法是使用 Fiddler(Http Web 代理),并查看是否发生了相同的错误。如果没有(即 Fiddler 已经为您处理了该问题),那么您应该能够使用 UseUnsafeHeaderParsing 标志来修复它。

如果您正在寻找以编程方式设置此值的方法,请参见此处的示例:http://o2platform.wordpress.com/2010/10/20/dealing-with-the-server-committed-a-protocol-violation-sectionresponsestatusline/


0

您可能需要检查头文件的内容。尝试添加以下内容,正如此链接所建议:

Accept: text/html, application/xhtml+xml, */*

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接