2019年12月24日 星期二

[C#]伺服器認可通訊協定違規. Section=ResponseHeader Detail=CR 必須在 LF 之前

透過 .NET  WebRequest 寫爬蟲抓取老舊系統時,發生錯誤

伺服器認可通訊協定違規. Section=ResponseHeader Detail=CR 必須在 LF 之前


解決方式(參考MSDN):
  Web.config 中<httpWebRequest> 設定 useUnsafeHeaderParsing="true"

不過MSDN中有提到這個設定方式是有風險的:

根據預設,.NET Framework 會嚴格地強制執行 RFC 2616 以進行 URI 剖析。 某些伺服器回應可能會在禁止的欄位中包含控制字元,而這會導致 HttpWebRequest.GetResponse() 方法擲回 WebException 如果useUnsafeHeaderParsing設定為true,在此情況下,HttpWebRequest.GetResponse() 將不會擲回。不過,您的應用程式很容易受到數種形式的 URI 剖析攻擊 最佳的解決方法是變更伺服器,讓回應不包含控制字元。