服务器违反了协议。 Section = ResponseStatusLine错误

我创build了一个程序,试图在网站上发布一个string,我得到这个错误:

“服务器提交协议违规。Section = ResponseStatusLine”

这行代码之后:

gResponse = (HttpWebResponse)gRequest.GetResponse(); 

我如何解决这个exception?

尝试把它放在你的app / web.config中:

 <system.net> <settings> <httpWebRequest useUnsafeHeaderParsing="true" /> </settings> </system.net> 

如果这不起作用,您也可以尝试将KeepAlive属性设置为false。

有时这个错误发生在UserAgent请求参数是空的时候(在我的情况下,在github.com api中)。

设置这个参数自定义不为空的string解决了我的问题。

在我的情况下,罪魁祸首是返回一个No Content响应,但同时定义一个响应主体。 可能这个答案提醒我,也许别人不要再次返回一个身体的NoContent响应

这个行为与10.2.5 204的HTTP规范的 内容是一致的,它说:

204响应绝不能包含消息体,因此总是由头字段后的第一个空行终止。

另一种可能性是:在执行POST时,服务器以不正确的方式响应100次。

这解决了我的问题:

 request.ServicePoint.Expect100Continue = false; 

当我在本地机器上运行Skype时,这就发生了。 一旦我结束,exception就消失了。

想法这个页面

许多解决scheme都提到了一种解决方法,但不涉及错误的实际原因。

导致此错误的一个可能原因是,Web服务器使用ASCIIISO-8859-1以外的编码输出标题响应部分。 如果Response-Phrase包含扩展拉丁字符,则使用ISO-8859-1的原因是。

导致此错误的另一个可能原因是Web服务器使用输出字节顺序标记(BOM)的UTF-8 。 例如,默认常量Encoding.UTF8输出BOM,很容易忘记这一点。 该网页将在Firefox和Chrome中正常工作,但HttpWebRequest将炸弹:)。 一个快速的解决办法是改变Web服务器使用不输出BOM的UTF-8编码,例如new UTF8Encoding(false) (只要Response-Phrase只包含ASCII字符,但它确实应该使用ASCIIISO-8859-1标头,然后UTF-8或其他编码的响应)。

一个方法来debugging这个(并确保它是导致问题的协议违规),是使用Fiddler(Http Web Proxy)并查看是否发生相同的错误。 如果不行(即Fiddler为你处理这个问题),那么你应该可以使用UseUnsafeHeaderParsing标志来修复它。

如果您正在寻找一种以编程方式设置此值的方法,请参阅以下示例: http : //o2platform.wordpress.com/2010/10/20/dealing-with-the-server-committed-a-protocol-violation-sectionresponsestatusline /

设置期望100继续为false,并将套接字空闲时间减less到两秒钟解决了我的问题

 ServicePointManager.Expect100Continue = false; ServicePointManager. MaxServicePointIdleTime = 2000; 

Skype是我的问题的主要原因:

当您将Visual Studio设置为debugging运行在IIS中的现有Web应用程序而不是内置的ASP.NETdebuggingWeb服务器时,通常会出现此错误。 IIS默认侦听端口80上的Web请求。在这种情况下,另一个应用程序已经侦听到端口80上的请求。通常,有问题的应用程序是Skype,默认情况下会在安装时监听端口80和443。 Skype已经占用端口80.所以IIS无法启动。

要解决该问题,请执行以下步骤:

Skype – >工具 – >选项 – >高级 – >连接:

取消选中“使用端口80和443作为传入连接的替代品”。

正如下面指出的那样,一旦完成IIS重置

我试图从代理后面访问Last.fm Rest API,并得到这个着名的错误。

服务器违反了协议。 第= ResponseStatusLine

尝试了一些解决方法后,只有这两个为我工作

 HttpWebRequest HttpRequestObj = WebRequest.Create(BaseUrl) as HttpWebRequest; HttpRequestObj.ProtocolVersion = HttpVersion.Version10; 

 HttpWebRequest HttpRequestObj = WebRequest.Create(BaseUrl) as HttpWebRequest; HttpRequestObj.ServicePoint.Expect100Continue = false; 

没有解决scheme为我工作,所以我不得不使用WebClient而不是一个HttpWebRequest,问题是没有更多。

我需要使用CookieContainer,所以我使用Pavel Savara在这个线程中发布的解决scheme – 在WebClient类中使用CookieContainer

从这一行删除“受保护的”:

私人只读CookieContainer容器=新CookieContainer();

我们试过的第一件事是禁用IIS的dynamic内容压缩,解决了错误,但是错误并没有导致服务器端,只有一个客户端受到这个影响。

在客户端,我们卸载了VPN客户端,重置了Internet设置,然后重新安装了VPN客户端。 这个错误也可能是以前有过防火墙的杀毒软件造成的。 然后,我们启用了dynamic内容压缩,现在它可以像以前一样正常工作。

错误出现在连接到Web服务和TFS的自定义应用程序中。

在我的情况下,IIS没有必要的权限来访问相关的ASPXpath。

我给IIS用户权限的相关目录,一切都很好。

看你的代码,并find是否设置NULL或空值的头。