Ich habe ein Programm erstellt, versucht, eine Zeichenfolge auf einer Site zu veröffentlichen, und erhalte folgende Fehlermeldung:
"Der Server hat eine Protokollverletzung begangen. Section = ResponseStatusLine"
nach dieser Codezeile:
gResponse = (HttpWebResponse)gRequest.GetResponse();
Wie kann ich diese Ausnahme beheben?
c#
httpwebrequest
manish patel
quelle
quelle
Manchmal tritt dieser Fehler auf, wenn der
UserAgent
Anforderungsparameter leer ist (in meinem Fall in github.com api).Das Setzen dieses Parameters auf eine benutzerdefinierte, nicht leere Zeichenfolge hat mein Problem gelöst.
quelle
WebClient
hier stackoverflow.com/a/11841680/4795214HttpClient
add:client.DefaultRequestHeaders.Add("User-Agent", "Anything");
line für fix abfragen möchten .Der Schuldige in meinem Fall war die Rückgabe einer
No Content
Antwort, aber gleichzeitig die Definition eines Antwortkörpers. Möge diese Antwort mich und vielleicht andere daran erinnern, nie wieder eineNoContent
Antwort mit einem Körper zu erwidern .Dieses Verhalten steht im Einklang mit 10.2.5 204 No Content der HTTP-Spezifikation, in der Folgendes angegeben ist :
quelle
The server committed a protocol violation. Section=ResponseStatusLine
Fehler bei der Verwendung von WebApi erhalten habe, um eine benutzerdefinierteNoContent()
Antwort zurückzugeben, dieNo Content
die Antwort aus irgendeinem bizarren Grund gesendet hat ! Einmal nahm ich , dass aus das Problem ging :) wegsomeContent
return Request.CreateResponse(HttpStatusCode.NoContent, someContent);
Eine andere Möglichkeit: Wenn Sie einen POST ausführen, antwortet der Server mit einer 100-fachen Fortsetzung auf falsche Weise.
Dies löste das Problem für mich:
quelle
var http = new HttpClient(); http.DefaultRequestHeaders.ExpectContinue = false;
Dies geschah für mich, als Skype auf meinem lokalen Computer ausgeführt wurde. Sobald ich schloss, dass die Ausnahme wegging.
Idee mit freundlicher Genehmigung dieser Seite
quelle
Eine Möglichkeit, dies zu debuggen (und sicherzustellen, dass es sich um die Protokollverletzung handelt, die das Problem verursacht), besteht darin, Fiddler (HTTP-Webproxy) zu verwenden und festzustellen, ob der gleiche Fehler auftritt. Wenn dies nicht der Fall ist (dh Fiddler hat das Problem für Sie behandelt), sollten Sie es mithilfe des UseUnsafeHeaderParsing-Flags beheben können.
Wenn Sie nach einer Möglichkeit suchen, diesen Wert programmgesteuert festzulegen, sehen Sie sich die folgenden Beispiele an: http://o2platform.wordpress.com/2010/10/20/dealing-with-the-server-committed-a-protocol-violation-sectionresponsestatusline /.
quelle
Viele Lösungen sprechen von einer Problemumgehung, aber nicht von der tatsächlichen Fehlerursache.
Eine mögliche Ursache für diesen Fehler ist, dass der Webserver eine andere Codierung als
ASCII
oderISO-8859-1
zur Ausgabe des Header-Antwortabschnitts verwendet. Der Grund für die VerwendungISO-8859-1
wäre, wenn dasResponse-Phrase
erweiterte lateinische Zeichen enthält.Eine weitere mögliche Ursache für diesen Fehler ist die Verwendung eines Webservers
UTF-8
, der den Byte-Order-Marker (BOM) ausgibt. Beispielsweise gibt die StandardkonstanteEncoding.UTF8
die Stückliste aus, und dies kann leicht vergessen werden. Die Webseiten funktionieren in Firefox und Chrome korrekt,HttpWebRequest
bombardieren aber :). Eine schnelle Lösung besteht darin, den Webserver so zu ändern, dass die UTF-8-Codierung verwendet wird, die die Stückliste nicht ausgibt, z. B.new UTF8Encoding(false)
(was in Ordnung ist, solange dasResponse-Phrase
nur ASCII-Zeichen enthält, aber eigentlich sollte esASCII
oderISO-8859-1
für die Header verwenden, und dannUTF-8
oder eine andere Codierung für die Antwort).quelle
Das Einstellen von "Erwarten 100" ist weiterhin falsch und das Reduzieren der Leerlaufzeit des Sockets auf zwei Sekunden hat das Problem für mich behoben
quelle
Skype war die Hauptursache für mein Problem:
Dieser Fehler tritt normalerweise auf, wenn Sie Visual Studio so eingerichtet haben, dass eine vorhandene Webanwendung debuggt, die in IIS und nicht in ASP.NET ausgeführt wird Debug-Webserver debuggt. IIS wartet standardmäßig auf Webanforderungen an Port 80. In diesem Fall wartet eine andere Anwendung bereits auf Anforderungen an Port 80. In der Regel handelt es sich bei der fehlerhaften Anwendung um Skype, das bei der Installation standardmäßig die Überwachung der Ports 80 und 443 übernimmt. Skype belegt bereits den Port 80. Daher kann IIS nicht gestartet werden.
Führen Sie die folgenden Schritte aus, um das Problem zu beheben:
Skype -> Extras -> Optionen -> Erweitert -> Verbindung:
Deaktivieren Sie "Port 80 und 443 als Alternative für eingehende Verbindungen verwenden".
Und wie unten ausgeführt, führen Sie nach Abschluss einen IIS-Reset durch .
quelle
Ich habe versucht, hinter einem Proxy auf die Last.fm Rest-API zuzugreifen, und habe diesen berühmten Fehler erhalten.
Nachdem ich einige Problemumgehungen ausprobiert hatte, arbeiteten nur diese beiden für mich
und
quelle
Keine der Lösungen funktionierte für mich, daher musste ich einen WebClient anstelle eines HttpWebRequest verwenden, und das Problem trat nicht mehr auf.
Ich musste einen CookieContainer verwenden, daher habe ich die von Pavel Savara in diesem Thread veröffentlichte Lösung verwendet - Verwenden von CookieContainer mit der WebClient-Klasse
Entfernen Sie einfach "protected" aus dieser Zeile:
privater schreibgeschützter CookieContainer-Container = neuer CookieContainer ();
quelle
Eine wahrscheinliche Ursache für dieses Problem ist die WPAD-Konfiguration (Web Proxy Auto Discovery Protocol) im Netzwerk. Die HTTP-Anforderung wird transparent an einen Proxy gesendet, der eine Antwort zurücksenden kann, die der Client nicht akzeptiert oder für deren Annahme er nicht konfiguriert ist. Bevor Sie Ihren Code in Bits hacken, überprüfen Sie, ob WPAD nicht im Spiel ist, insbesondere wenn dies gerade aus heiterem Himmel "passiert" ist.
quelle
Mein Problem war, dass ich
https
Endpoint mit angerufen habehttp
.quelle
Als erstes haben wir versucht, die dynamische Inhaltskomprimierung für IIS zu deaktivieren. Dadurch wurden die Fehler behoben, aber der Fehler wurde nicht serverseitig verursacht, und nur ein Client war davon betroffen.
Auf der Clientseite haben wir VPN-Clients deinstalliert, die Interneteinstellungen zurückgesetzt und dann die VPN-Clients neu installiert. Der Fehler kann auch durch frühere Antivirenprogramme mit Firewall verursacht werden. Dann haben wir die dynamische Inhaltskomprimierung wieder aktiviert und jetzt funktioniert es einwandfrei wie zuvor.
In der benutzerdefinierten Anwendung, die eine Verbindung zu einem Webdienst herstellt, und auch bei TFS ist ein Fehler aufgetreten.
quelle
In meinem Fall verfügte der IIS nicht über die erforderlichen Berechtigungen für den Zugriff auf den entsprechenden ASPX-Pfad.
Ich habe den IIS-Benutzerberechtigungen für das entsprechende Verzeichnis erteilt, und alles war in Ordnung.
quelle
Sehen Sie sich Ihren Code an und finden Sie heraus, ob Sie einen Header mit NULL oder einem leeren Wert setzen.
quelle
Ich bekam diesen Fehler von meinen PHP JSON / REST-Diensten
Ich bekam den Fehler von relativ seltenen POST-Uploads, nachdem ich
ob_start("ob_gzhandler")
das am häufigsten aufgerufene GET-PHP-Skript hinzugefügt hatteIch kann nur verwenden
ob_start()
, und alles ist in Ordnung.quelle