当前位置:编程学习 > C#/ASP.NET >>

出现错误:服务器提交了协议冲突 Section=ResponseStatusLine

下载了一个.Net3.0的软件,在有鉴权的代理服务器后面访问Internet,结果代理认证通过后,提示了这个错误,我在该软件的config文件中加了
<system.net>
<settings>
<httpWebRequest useUnsafeHeaderParsing = "true"/>
</settings>
  </system.net>
甚至在.Net 2.0的配置文件machine.config中把这句也加上去了,还是不行,请问是何原因,谢谢! --------------------编程问答-------------------- 服务器提交了协议冲突. Section=ResponseHeader Detail=CR 后面必须是 LF 

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

主体意思是微软没有容忍不符合RFC 822中的httpHeader必须以CRLF结束的规定的服务器响应。

一个解决方案是在application.config或web.config文件里加入

  <system.net>

    <settings>

      <httpWebRequest useUnsafeHeaderParsing="true" />

    </settings>

  </system.net>

允许系统容忍(tolerant)只以CR或LF结尾的hearder信息
--------------------编程问答-------------------- 在用HttpWebRequest的时候,发现返回"基础连接已经关闭: 该服务器提交了 HTTP 协议冲突".原来是微软没有容忍不符合RFC 822中的httpHeader中一些字符的问题(如空格),还有必须以CRLF结束的规定的服务器响应。
1。对于诸如空格问题引起的问题,建议不要采用HttpWebRequest类。采用底层的Socket来编写,例子如下:

 程序代码


            string  buffer = "GET /Submit%20CommandId...";
            string strAgent = "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)";

            buffer = buffer+"User-Agent: "+ strAgent +"\n\n";

            try
            {

                int port = ..;
                string host = "..";
                IPAddress ip = IPAddress.Parse(host);
                IPEndPoint ipe = new IPEndPoint(ip, port);//把ip和端口转化为IPEndPoint实例

                Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            Console.WriteLine("Conneting...");

                c.Connect(ipe);//连接到服务器     

                if(c.Connected)
                {

                byte[] bs = Encoding.ASCII.GetBytes(buffer);
                      
                    Console.WriteLine("Send Message:"+buffer);

                c.Send(bs, bs.Length, 0);//发送测试信息
        
                string recvStr = "";

                byte[] recvBytes = new byte[1024];

                int bytes;

                bytes = c.Receive(recvBytes, recvBytes.Length, 0);//从服务器端接受返回信息

                recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);

                Console.WriteLine("Client Get Message:{0}", recvStr);//显示服务器返回信息

                }

               c.Close();

            }
            catch (ArgumentNullException e)
            {
            Console.WriteLine("ArgumentNullException: {0}", e);

            }
            catch (SocketException e)
            {
            }

           Console.WriteLine("Press Enter to Exit");


2.必须以CRLF结束的规定的服务器响应
一个解决方案是在application.config或web.config文件里加入

  <system.net>

    <settings>

      <httpWebRequest useUnsafeHeaderParsing="true" />

    </settings>

  </system.net>

允许系统容忍(tolerant)只以CR或LF结尾的hearder信息 --------------------编程问答-------------------- 同意楼上 --------------------编程问答-------------------- 帮顶 --------------------编程问答-------------------- up --------------------编程问答-------------------- happy up --------------------编程问答-------------------- 我遇到的问题是:
下载“http://localhost:50994/MyDocuments.asmx”时出错。
服务器提交了协议冲突. Section=ResponseStatusLine
There was an error downloading 'http://localhost:50994/MyDocuments.asmx/$metadata'.
服务器提交了协议冲突. 
按楼主的说法添加了在web.config文件里加入 

    <system.net> 

        <settings> 

            <httpWebRequest   useUnsafeHeaderParsing= "true "   /> 

        </settings> 

    </system.net> 
还是没有效果。
求助!!!!! --------------------编程问答--------------------   c.Send(bs,   bs.Length,   0);//发送测试信息 
                
                             string   recvStr   =   " "; 

                             byte[]   recvBytes   =   new   byte[1024]; 

                             int   bytes; 

                             bytes   =   c.Receive(recvBytes,   recvBytes.Length,   0);//从服务器端接受返回信息 

这种写法有潜在问题,如果服务器分多次传数据,就会接收不全,因为是一接收到数据就往下走了.局域网里可能还好说,访问internet上的web服务器就会出问题,不信用这个程序访问一下google看看 --------------------编程问答-------------------- 传递的字串没有编码。 --------------------编程问答-------------------- 把客户端的keepAlive选项关掉。 --------------------编程问答--------------------
引用 10 楼 andot 的回复:
把客户端的keepAlive选项关掉。

立竿见影
补充:.NET技术 ,  Web Services
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,