• The server committed a protocol violation. Section=ResponseHeader Detail=CR must be followed by LF 错误


    今天公司的项目,发现一个非常诡异的现象,原来运行的好好的程序,现在点击没反应。后发现错误日志为:The server committed a protocol violation. Section=ResponseHeader Detail=CR must be followed by LF 在网络上找了下答案。下面是网络摘抄过来的解决方法。自己汇总下。 这句错误的翻译:服务器提交了协议冲突. Section=ResponseHeader Detail=CR 后面必须是 LF 主体意思是微软没有容忍不符合RFC 822中的httpHeader必须以CRLF结束的规定的服务器响应。 下面是一位高人的解说,给大家分享下。 這個錯誤主要是因為 Web Server 回傳的 HTTP 訊息結尾只有 \n,而 .NET 實作的 WebRequest 預設情況下,必須符合 RFC 855 實作,也就是結尾必須包含 \r\n。所以,當 .NET 的 WebRequest 收到這個 HTTP 訊息時,就會出現錯誤。 解法兩個,一個就是讓 Web Server 丟出的 HTTP 訊息符合 RFC 855,另一個就是是讓 WebRequest 睜一隻眼閉一隻眼,亦即將 WebRequest 的 UseUnsafeHeaderParsing 屬性設為 true,這個屬性在 MSDN 文件上得描述如下: 當這個屬性設定為 false 時,會在 HTTP 剖析期間執行下列驗證: 在行結尾程式碼中使用 CRLF;不允許單獨使用 CR 或 LF。 標頭名稱中不應該有空格。 如果有多個狀態列,會將所有額外狀態列視為不正確的標頭名稱/值組。 除了狀態碼外,狀態列還必須有狀態描述。 標頭名稱中不能有非 ASCII 字元。無論這個屬性設定為 true 或 false,都會執行這個驗證。 當發生通訊協定違規時,會擲回 WebException 例外狀況,並將狀態設定為 ServerProtocolViolation。如果 UseUnsafeHeaderParsing 屬性設定為 true,則會忽略驗證錯誤。 將這個屬性設定為 true 具有安全性含義,因此只有在需要與伺服器的回溯相容性 (Backward Compatibility) 時,才應該執行此動作。 需要注意的是這個屬性到 .NET 2.0 才新增的,且文件中也提到除非為了 Web Server 回溯相容,否則還是設定為 false。另外,如果要全面套用到每一個使用到 WebRequest 的地方,在 app.config 加上下面的設定: <system.net> <settings> <httpWebRequest useUnsafeHeaderParsing="true" /> </settings> </system.net>  
    写个博客不容易,请转载的时候备注下原文出处,谢谢
    作者:keepnode
    博客地址:http://www.cnblogs.com/woaic
    每件事到最后都是好事,如果不是好事,说明还没有到最后
    =========================
  • 相关阅读:
    CLR基础
    Windows7下使用Shell32.dll出现没有实现接口的错误的解决办法
    Python学习
    Python学习
    开发常识之Linux用户及其权限管理
    (转)简单明晰的Jupyter Notebook总结与指南
    Oracle系列数据库版本区别
    应用场景区别-MongoDB与MySQL的选择比较
    我的博客(个人空间)地址更新说明
    (转)Spark与Map-Reduce区别对比
  • 原文地址:https://www.cnblogs.com/woaic/p/3942804.html
Copyright © 2020-2023  润新知