【问题标题】:HttpWebRequestError: The server committed a protocol violation. Section=ResponseHeader Detail=CR must be followed by LFHttpWebRequestError:服务器违反了协议。 Section=ResponseHeader Detail=CR 后面必须跟 LF
【发布时间】:2009-09-29 10:50:43
【问题描述】:

我创建了一个示例 asp.net 应用程序,并尝试使用 httpwebrequest 从我的服务器上抓取数据。但有时我得到了上述错误。我在谷歌上做了一些搜索,但都说你应该在 web.config 中添加属性“<httpWebRequest useUnsafeHeaderParsing="true" />”。

这个属性有“不安全”这个词,所以我太担心了。我不能在我的站点配置中添加这个。有没有其他选项可以读取我的抓取 URL 的响应。请告诉我如何没有“<httpWebRequest useUnsafeHeaderParsing="true" />”可以吗

提前致谢, 乳糜泻

【问题讨论】:

  • 我看到了一个不同的情况,同样的错误——Imperva's Incapsula缓存机制试图缓存一个特定的响应。因此,Incapsula 没有重定向到真实服务器,而是回复了相同的响应,但不知何故,标头有点不同,并且不符合 Windows CR-LF (\r\n)。

标签: asp.net


【解决方案1】:

这当然是服务器问题——服务器没有遵循 HTTP 规范,而 .NET 客户端将此标记为潜在问题。 “不安全”在我看来有点用词不当。这里并没有真正的大安全问题,只是不遵守 RFC,这很糟糕,但不幸的是并不罕见。

因此,正如您在 Google 中发现的,解决该问题的方法是应用以下配置更改:

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

【讨论】:

  • 如果您想知道在哪里添加它,请在解决方案资源管理器中查找App.config
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    另一种可能性:在执行 POST 时,服务器以错误的方式响应 100 continue。

    这解决了我的问题:

    request.ServicePoint.Expect100Continue = false;

    【讨论】:

      【解决方案4】:

      您可能需要检查标题的内容。尝试按照this link 的建议添加以下内容:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-31
        • 1970-01-01
        • 1970-01-01
        • 2023-03-05
        • 2013-01-29
        • 2011-01-29
        • 1970-01-01
        相关资源
        最近更新 更多