Miałem 6 adresów URL rzucających ten błąd. Ustawienie useUnsafeHeaderParsing naprawiło to dla jednego łącza, ale ustawienie KeepAlive = false naprawiło to dla wszystkich 6.
To samo można umieścić w tagu głównym <configuration> w App.copnfig dla aplikacji innych niż internetowe (na przykład naprawiłem w ten sposób aplikację WPF - dzięki!).
ktoś wie, dlaczego ten środek bezpieczeństwa jest nakładany przez IIS? Zadziałało, ale nie rozumiem powodu ograniczenia wartości nagłówka (ręczne ustawienie ich w moim przypadku).
Zgadzam się z Tobiaszem - unikasz problemu. Może się zdarzyć, że problem występuje na serwerze, którego nie możesz naprawić, a zatem unikanie może być jedyną opcją ... ale mimo to wyjaśnijmy różnicę między unikaniem błędu protokołu a jego naprawą.
W moim przypadku winowajcą było zwrócenie No Contentodpowiedzi, 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:
Odpowiedź 204 NIE MOŻE zawierać treści wiadomości i dlatego jest zawsze zakończona pierwszą pustą linią po polach nagłówka.
Po prostu przeczytaj to po tym, jak The server committed a protocol violation. Section=ResponseStatusLine wystąpił błąd podczas używania WebApi do zwrócenia niestandardowej NoContent()odpowiedzi, która była wysyłana No Contentw odpowiedzi z jakiegoś dziwnego powodu! Kiedy to wyjęłam, problem zniknął :)
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.
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ż ASCIIlub ISO-8859-1do wyprowadzenia sekcji odpowiedzi nagłówka. Powodem ISO-8859-1byłoby użycie Response-Phraserozszerzonych znaków łacińskich.
Inną możliwą przyczyną tego błędu jest to, że serwer WWW używa, UTF-8który generuje znacznik kolejności bajtów (BOM). Na przykład, domyślna stała Encoding.UTF8wyprowadza BOM i łatwo o tym zapomnieć. Strony internetowe będą działać poprawnie w Firefoksie i Chrome, ale HttpWebRequestbę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 ile Response-Phrasetylko zawiera znaki ASCII, ale tak naprawdę powinno używać ASCIIlub ISO-8859-1dla nagłówków, a następnie UTF-8lub inne kodowanie odpowiedzi).
To najlepsza odpowiedź. Wyjaśnia, dlaczego serwer sieciowy działa nieprawidłowo. Dzięki! (Muszę emulować serwer sieciowy z gniazdami z powodu problemów z wdrażaniem z HttpListener.)
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:
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.
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.
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.