服务器违反了协议。 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服务器使用ASCII
或ISO-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字符,但它确实应该使用ASCII
或ISO-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或空值的头。