出现错误:服务器提交了协议冲突 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选项关掉。 --------------------编程问答--------------------
立竿见影
补充:.NET技术 , Web Services