服务器提交了协议冲突. Section=ResponseHeader Detail=CR 后面必须是 LF
以下是引发问题的代码:

网上查了一下,发现都是这样:
解决方案:winfrom 在app.config种添加 web 在 web.config种添加
<system.net> <settings> <httpWebRequest useUnsafeHeaderParsing="true" /> </settings> </system.net>useUnsafeHeaderParsing的值【该方法须在发送请求之前进行设定否则无效果】ToggleAllowUnsafeHeaderParsing(true);
public static bool ToggleAllowUnsafeHeaderParsing(bool enable)
{
Assembly assembly = Assembly.GetAssembly(typeof(SettingsSection));
if (assembly != null)
{
Type settingsSectionType = assembly.GetType("System.Net.Configuration.SettingsSectionInternal");
if (settingsSectionType != null)
{
object anInstance = settingsSectionType.InvokeMember("Section",
BindingFlags.Static | BindingFlags.GetProperty | BindingFlags.NonPublic, null, null, new object[] { });
if (anInstance != null)
{
FieldInfo aUseUnsafeHeaderParsing = settingsSectionType.GetField("useUnsafeHeaderParsing", BindingFlags.NonPublic | BindingFlags.Instance);
if (aUseUnsafeHeaderParsing != null)
{
aUseUnsafeHeaderParsing.SetValue(anInstance, enable);
return true;
}
}
}
}
return false;
}
以上代码引用自:https://www.cnblogs.com/aochulai/p/3881415.html,并且添加了 ToggleAllowUnsafeHeaderParsing(true); 后果然OK了。
但问题所在是在哪里呢,所谓前人栽树,后人乘凉。从https://www.cnblogs.com/lewisli/p/6775010.html得出该问题的查找方法。
其实“服务器提交了协议冲突. Section=ResponseHeader Detail=CR 后面必须是 LF” 这个问题的原因主要是以下几点导致的:

从百度得知:
在文本处理中, CR, LF, CR/LF是不同操作系统上使用的换行符.
Dos和windows采用回车+换行CR/LF表示下一行,
而UNIX/Linux采用换行符LF表示下一行,
CR等于回车(\r),LF等于换行(\n)
在HTTP协议中HTTP Header请求信息中的每一行都必须是在CRLF来结束。
服务器检测到你提交的请求不符合HTTP协议的这个规定,所以拒绝了你的请求。
那么究竟是哪一个部分产生出了不符合HTTP协议的格式的信息,是在http header的请求(Request)部分,还是响应信息(Response)部分呢?
是我提交的header的格式没有按照“CRLF结尾”的规定,还是服务器根据我提交的heaer所产生的响应header没有按照“CRLF结尾”的规定?
于是我打开WireShark,监测要连接的IP。
以下是POST的信息:

以下是返回的信息:

最终得出,服务端返回的信息头里边的Content-Type没有以\r\n结尾。
参考文章:
https://www.cnblogs.com/lewisli/p/6775010.html
http://www.360doc.com/content/11/0113/20/3508740_86319358.shtml
https://my.oschina.net/EricWe/blog/126844
http://www.360doc.com/content/10/0930/17/3668821_57590979.shtml
浙公网安备 33010602011771号