Utworzyłem program, próbowałem zamieścić ciąg na stronie i otrzymuję ten błąd:
„Serwer popełnił naruszenie protokołu. Section = ResponseStatusLine”
po tym wierszu kodu:
gResponse = (HttpWebResponse)gRequest.GetResponse();
Jak mogę naprawić ten wyjątek?
c#
httpwebrequest
manish patel
źródło
źródło
Czasami ten błąd występuje, gdy
UserAgent
parametr żądania jest pusty (w moim przypadku w interfejsie API github.com).Ustawienie tego parametru na niestandardowy niepusty ciąg rozwiązało mój problem.
źródło
WebClient
tutaj stackoverflow.com/a/11841680/4795214HttpClient
add:client.DefaultRequestHeaders.Add("User-Agent", "Anything");
line for fix.W moim przypadku winowajcą było zwrócenie
No Content
odpowiedzi, ale zdefiniowanie treści odpowiedzi w tym samym czasie. Niech ta odpowiedź przypomni mi i może innym, abyNoContent
nigdy więcej nie odpowiadali z ciałem .To zachowanie jest zgodne z 10.2.5 204 bez zawartości w specyfikacji HTTP , który mówi:
źródło
The server committed a protocol violation. Section=ResponseStatusLine
wystąpił błąd podczas używania WebApi do zwrócenia niestandardowejNoContent()
odpowiedzi, która była wysyłanaNo Content
w odpowiedzi z jakiegoś dziwnego powodu! Kiedy to wyjęłam, problem zniknął :)someContent
zreturn Request.CreateResponse(HttpStatusCode.NoContent, someContent);
+1Inna możliwość: podczas wykonywania POST serwer odpowiada 100 kontynuuj w nieprawidłowy sposób.
To rozwiązało problem dla mnie:
źródło
var http = new HttpClient(); http.DefaultRequestHeaders.ExpectContinue = false;
To się działo, gdy miałem Skype'a na moim komputerze lokalnym. Jak tylko zamknąłem, wyjątek zniknął.
Pomysł dzięki uprzejmości tej strony
źródło
Jednym ze sposobów debugowania tego (i upewnienia się, że przyczyną problemu jest naruszenie protokołu), jest użycie programu Fiddler (serwer proxy sieci Web Http) i sprawdzenie, czy występuje ten sam błąd. Jeśli tak się nie stanie (tj. Fiddler załatwił problem za Ciebie), powinieneś być w stanie go naprawić za pomocą flagi UseUnsafeHeaderParsing.
Jeśli szukasz sposobu na programowe ustawienie tej wartości, zapoznaj się z przykładami tutaj: http://o2platform.wordpress.com/2010/10/20/dealing-with-the-server-committed-a-protocol-violation-sectionresponsestatusline /
źródło
Wiele rozwiązań mówi o obejściu, ale nie o rzeczywistej przyczynie błędu.
Jedną z możliwych przyczyn tego błędu jest to, że serwer WWW używa kodowania innego niż
ASCII
lubISO-8859-1
do wyprowadzenia sekcji odpowiedzi nagłówka. PowodemISO-8859-1
byłoby użycieResponse-Phrase
rozszerzonych znaków łacińskich.Inną możliwą przyczyną tego błędu jest to, że serwer WWW używa,
UTF-8
który generuje znacznik kolejności bajtów (BOM). Na przykład, domyślna stałaEncoding.UTF8
wyprowadza BOM i łatwo o tym zapomnieć. Strony internetowe będą działać poprawnie w Firefoksie i Chrome, aleHttpWebRequest
będą bombardować :). Szybką naprawą jest zmiana serwera WWW, aby używał kodowania UTF-8, które nie generuje BOM, np.new UTF8Encoding(false)
(Co jest OK, o ileResponse-Phrase
tylko zawiera znaki ASCII, ale tak naprawdę powinno używaćASCII
lubISO-8859-1
dla nagłówków, a następnieUTF-8
lub inne kodowanie odpowiedzi).źródło
Ustawienie oczekiwania 100 nadal na fałsz i zmniejszenie czasu bezczynności gniazda do dwóch sekund rozwiązało problem
źródło
Skype był główną przyczyną mojego problemu:
Ten błąd zwykle występuje, gdy program Visual Studio jest skonfigurowany do debugowania istniejącej aplikacji internetowej działającej w usługach IIS, a nie wbudowanego serwera sieci Web debugowania ASP.NET . Usługi IIS domyślnie nasłuchują żądań sieci Web na porcie 80. W tym przypadku inna aplikacja nasłuchuje już żądań na porcie 80. Zazwyczaj problematyczną aplikacją jest Skype, który domyślnie przejmuje nasłuchiwanie na portach 80 i 443 po zainstalowaniu. Skype zajmuje już port 80. Dlatego IIS nie może się uruchomić.
Aby rozwiązać ten problem, wykonaj następujące czynności:
Skype -> Narzędzia -> Opcje -> Zaawansowane -> Połączenie:
Usuń zaznaczenie opcji „Użyj portów 80 i 443 jako alternatyw dla połączeń przychodzących”.
Jak wskazano poniżej, po wykonaniu resetowania usług IIS .
źródło
Próbowałem uzyskać dostęp do Last.fm Rest API zza serwera proxy i otrzymałem ten słynny błąd.
Po wypróbowaniu kilku obejść, tylko te dwa działały dla mnie
i
źródło
Żadne z rozwiązań nie działało dla mnie, więc musiałem użyć WebClient zamiast HttpWebRequest i problem już nie istniał.
Potrzebowałem użyć CookieContainer, więc skorzystałem z rozwiązania zamieszczonego przez Pavela Savarę w tym wątku - Używanie CookieContainer z klasą WebClient
po prostu usuń „chroniony” z tej linii:
prywatny kontener CookieContainer tylko do odczytu = new CookieContainer ();
źródło
Prawdopodobną przyczyną tego problemu jest konfiguracja protokołu Web Proxy Auto Discovery Protocol (WPAD) w sieci. Żądanie HTTP zostanie wysłane w sposób przezroczysty do serwera proxy, który może odesłać odpowiedź, której klient nie zaakceptuje lub nie jest skonfigurowany do akceptowania. Przed zhakowaniem kodu na bity sprawdź, czy WPAD nie jest w grze, szczególnie jeśli to „zaczęło się dziać” niespodziewanie.
źródło
Mój problem polegał na tym, że zadzwoniłem do
https
punktu końcowego zhttp
.źródło
Pierwszą rzeczą, którą próbowaliśmy, było wyłączenie dynamicznej kompresji treści dla IIS, co rozwiązało błędy, ale błąd nie był spowodowany po stronie serwera i dotyczyło to tylko jednego klienta.
Po stronie klienta odinstalowaliśmy klientów VPN, zresetowaliśmy ustawienia internetowe, a następnie ponownie zainstalowaliśmy klientów VPN. Błąd mógł być również spowodowany przez poprzedni program antywirusowy z zaporą ogniową. Następnie włączyliśmy z powrotem dynamiczną kompresję treści i teraz działa dobrze jak poprzednio.
Wystąpił błąd w niestandardowej aplikacji, która łączy się z usługą internetową, a także w TFS.
źródło
W moim przypadku IIS nie miał niezbędnych uprawnień dostępu do odpowiedniej ścieżki ASPX.
Dałem użytkownikowi IIS uprawnienia do odpowiedniego katalogu i wszystko poszło dobrze.
źródło
Zobacz swój kod i sprawdź, czy ustawiasz nagłówek z wartością NULL lub pustą.
źródło
Zacząłem otrzymywać ten błąd z moich usług php JSON / REST
Zacząłem otrzymywać błąd z relativley rzadkich przesyłania POST po dodaniu
ob_start("ob_gzhandler")
do najczęściej używanego skryptu GET phpPotrafię używać tylko
ob_start()
i wszystko jest w porządku.źródło