サーバーはプロトコル違反をコミットしました。Section = ResponseStatusLine ERROR


115

プログラムを作成し、サイトに文字列を投稿しようとしたところ、次のエラーが発生しました。

「サーバーがプロトコル違反をコミットしました。Section= ResponseStatusLine」

このコード行の後:

gResponse = (HttpWebResponse)gRequest.GetResponse(); 

この例外を修正するにはどうすればよいですか?

回答:


71

これをapp / web.configに入れてみてください:

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

これが機能しない場合は、 KeepAliveプロパティをfalseに。


3
このエラーが発生する6つのURLがありました。設定useUnsafeHeaderParsingは、一方のリンクのためにそれを固定しますが、キープアライブを設定= falseが、すべての6のためにそれを固定
デヴィッド・ハモンド

3
同じことを、Web以外のアプリケーションのApp.copnfigの<configuration>ルートタグ内に配置できます(たとえば、WPFアプリをそのように修正しました-ありがとう!)。
Yury Schkatula 2013

この安全対策がIISによって課される理由を誰かが知っていますか?機能しましたが、ヘッダー値の制限の理由がわかりません(私の場合は手動で設定します)。
emran 2014

26
これは、実際に修正するのではなく、単に問題を回避することです。これはデフォルトのソリューションではないはずです。
トビアス

4
トビアスに同意する-あなたは問題を回避しています。さて、問題は修正できないサーバーにあるため、回避が唯一の選択肢かもしれません...しかし、それでも、プロトコルエラーの回避と実際の修正の違いについて明確にしましょう。
metaforge 2014年

58

このエラーは時々発生します UserAgentリクエストパラメータが空の場合(場合はgithub.com api)に。

このパラメーターを空ではないカスタム文字列に設定すると、問題が解決しました。


5
ああ、これは私が必要としたものです。ありがとう。ここでは、ユーザーエージェントの例は次のとおりです。stackoverflow.com/a/15144495/891976
デヴィッドRuhmann

WebClientここで使用する簡単な行stackoverflow.com/a/11841680/4795214

5
ありがとう。お問い合わせしたい場合はGitHubを経由してHttpClient 追加:client.DefaultRequestHeaders.Add("User-Agent", "Anything"); 修正のためのライン。
Cihan Yakar

32

私の場合の犯人はNo Content応答を返していましたが、同時に応答本文を定義していました。この答えが私やおそらく他の人に、体で再び応答を返さないNoContentように思い出させますように。

この動作はと一致している10.2.5 204ノーコンテンツHTTPの仕様と言います:

204応答にはメッセージ本文を含めてはならないため、常にヘッダーフィールドの後の最初の空行で終了します。


The server committed a protocol violation. Section=ResponseStatusLine WebApiを使用して、何らかの奇妙な理由で応答でNoContent()送信No Contentしていたカスタム応答を返すときにエラーが発生した後、これを読んでください!私がそれを取り除くと、問題は解消しました:)
イントレピッド

2
これも私の問題でしたが、失敗したのはNo Content応答の後の呼び出しだったのでトリッキーでした。
mdickin

+1someContentから削除して修正return Request.CreateResponse(HttpStatusCode.NoContent, someContent);
snippetkid

12

もう1つの可能性:POSTを実行すると、サーバーは100継続で応答し、誤った方法で続行します。

これは私にとって問題を解決しました:

request.ServicePoint.Expect100Continue = false;

MediaFire APIにアクセスするとき、これは私のために働きました。
AlexPi 2016

3
私は遅れて来るのを知っていますが、「間違った方法で」とはどういう意味ですか?
kuskmen 2017

1
使用して誰のためのHttpClientを、以下は私のために働いていた:var http = new HttpClient(); http.DefaultRequestHeaders.ExpectContinue = false;
user2444499

9

これは、ローカルマシンでSkypeを実行しているときに起こりました。私が閉鎖するとすぐに、例外はなくなりました。

このページの礼儀アイデア


同じ問題がありました。Skypeであることが判明しました。残念なことに、適切なメッセージを提供できません。
jordan koskei 2015年

Skypeを閉じる必要はありません。Skypeを閉じずに取り組む方法を示すために、以下に回答を追加しました。
AltF4_

8

これをデバッグする1つの方法(および問題の原因となっているプロトコル違反であることを確認する)は、Fiddler(Http Web Proxy)を使用して、同じエラーが発生するかどうかを確認することです。解決しない場合(つまり、Fiddlerが問題を処理した場合)、UseUnsafeHeaderParsingフラグを使用して修正できるはずです。

この値をプログラムで設定する方法を探している場合は、次の例を参照してください。http://o2platform.wordpress.com/2010/10/20/dealing-with-the-server-committed-a-protocol-violation-sectionresponsestatusline /


Fiddlerは、GET HTTPリクエストで私が抱えている問題を実際に修正しています。フィドラーによって何が行われるかを確認できますか?
Olivier MATROT 2016年

8

多くの解決策は回避策について話しますが、エラーの実際の原因については話しません。

このエラーの1つの考えられる原因は、Webサーバーがヘッダー応答セクション以外のエンコーディングを使用しているASCIIISO-8859-1、ヘッダー応答セクションを出力しているかどうかです。使用ISO-8859-1する理由は、Response-Phraseに拡張ラテン文字が含まれている場合です。

このエラーのもう1つの考えられる原因はUTF-8、バイトオーダーマーカー(BOM)を出力するWebサーバーが使用している場合です。たとえば、デフォルトの定数Encoding.UTF8はBOMを出力しますが、これは忘れがちです。ウェブページはFirefoxとChromeで正しく動作しますが、HttpWebRequest爆撃されます:)。クイックフィックスは出力BOM、例えばないUTF-8エンコーディングを使用するWebサーバを変更することであるnew UTF8Encoding(false)限りとしてOKです(Response-PhraseASCII文字のみが含まれているが、しかし実際にそれを使うべきASCIIISO-8859-1、ヘッダーのため、その後、UTF-8または応答用の他のエンコーディング)。


これが最良の応答です。Webサーバーが正しく動作しない理由を説明します。ありがとう!(HttpListenerのデプロイメントの問題のため、ソケットでWebサーバーをエミュレートする必要があります。)
Andrew Rondeau '16年

6

expect 100を設定するとfalseが続き、ソケットのアイドル時間を2秒に減らすと問題が解決しました

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

6

Skypeが私の問題の主な原因でした。

このエラーは通常、組み込みのASP.NETではなくIISで実行されている既存のWebアプリケーションをデバッグするようにVisual Studioを設定した場合に発生します。デバッグWebサーバーます。IISはデフォルトでポート80でWebリクエストをリッスンします。この場合、別のアプリケーションがすでにポート80でリクエストをリッスンしています。通常、問題のアプリケーションはSkypeで、インストール時にデフォルトでポート80と443をリッスンします。Skypeはすでにポート80を使用しています。そのため、IISを起動できません。

この問題を解決するには、次の手順に従います。

Skype->ツール->オプション->詳細->接続:

「着信接続の代替としてポート80および443を使用する」のチェックを外します。

また、以下で指摘するように完了したらIISリセットを実行します


2
IISを再起動した後、IISを再起動することを忘れないでください
Ahmed Galal

3

プロキシの背後からLast.fm Rest APIにアクセスしようとすると、この有名なエラーが発生しました。

サーバーはプロトコル違反をコミットしました。Section = ResponseStatusLine

いくつかの回避策を試した後、これら2つだけが私のために働いた

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

そして

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

2

解決策はどれも私にとってはうまくいかなかったので、HttpWebRequestの代わりにWebClientを使用する必要があり、問題はもうありませんでした。

私はCookieContainerを使用する必要があったので、このスレッドでPavel Savaraが投稿したソリューションを使用しました- を使用しました-WebClientクラスでのCookieContainerの使用

この行から "protected"を削除するだけです:

読み取り専用のCookieContainerコンテナ=新しいCookieContainer();


2

この問題の原因として考えられるのは、ネットワーク上のWebプロキシ自動検出プロトコル(WPAD)構成です。HTTP要求は、クライアントが受け入れないか、受け入れるように構成されていない応答を返信できるプロキシに透過的に送信されます。コードをビットにハッキングする前に、WPADが機能していないことを確認してください。特に、これが突然「発生し始めた」場合は特にそうです。



1

私たちが最初に試みたのは、IISの動的コンテンツ圧縮を無効にすることでした。これによりエラーが解決しましたが、エラーの原因はサーバー側ではなく、1つのクライアントだけが影響を受けました。

クライアント側では、VPNクライアントをアンインストールし、インターネット設定をリセットしてから、VPNクライアントを再インストールしました。このエラーは、ファイアウォールがあった以前のアンチウイルスによっても発生する可能性があります。次に、動的コンテンツ圧縮を有効にしましたが、以前と同様に正常に機能します。

Webサービスに接続するカスタムアプリケーションおよびTFSでエラーが発生しました。


0

私の場合、IISには関連するASPXパスにアクセスするために必要な権限がありませんでした。

IISユーザーに関連ディレクトリへのアクセス許可を与えましたが、すべて順調でした。



0

私のPHP JSON / RESTサービスからこのエラーが発生し始めました

ob_start("ob_gzhandler")最も頻繁にアクセスされるGET PHPスクリプトに追加した後、私は相対珍しいPOSTアップロードからエラーを取得し始めました

私はちょうど使用することができob_start()、すべてが大丈夫です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.