web-dev-qa-db-fra.com

Le serveur a commis une violation de protocole. Section = ERREUR ResponseStatusLine

J'ai créé un programme, essayé de poster une chaîne sur un site et j'obtiens cette erreur:

"Le serveur a commis une violation de protocole. Section = ResponseStatusLine"

après cette ligne de code:

gResponse = (HttpWebResponse)gRequest.GetResponse(); 

Comment puis-je réparer cette exception?

106
manish patel

Essayez de mettre ceci dans votre application/web.config:

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

Si cela ne fonctionne pas, vous pouvez également essayer de définir la propriété KeepAlive sur false.

70
Darin Dimitrov

Parfois, cette erreur se produit lorsque le paramètre UserAgent request est vide (dans github.com api dans mon cas).

La définition de ce paramètre sur chaîne non vide personnalisée a résolu mon problème.

57
Ivan Kochurkin

Le coupable dans mon cas rendait un No Content réponse mais en définissant un corps de réponse en même temps. Puisse cette réponse me rappeler et peut-être à d’autres ne jamais renvoyer une réponse NoContent avec un corps .

Ce comportement est cohérent avec 10.2.5 204 aucun contenu de spécification HTTP qui dit:

La réponse 204 NE DOIT PAS inclure de corps de message et est donc toujours terminée par la première ligne vide après les champs d'en-tête.

28
Tobias

Autre possibilité: lors du POST, le serveur répond par un 100 continue de manière incorrecte.

Cela a résolu le problème pour moi:

request.ServicePoint.Expect100Continue = false;
10
marq

Cela se produisait pour moi lorsque Skype était exécuté sur ma machine locale. Dès que j'ai fermé que l'exception a disparu.

idée fournie par cette page

9
Luke

Une façon de déboguer ceci (et de vous assurer que c'est la violation de protocole qui cause le problème) consiste à utiliser Fiddler (proxy Web Http) et à voir si la même erreur se produit. Si ce n'est pas le cas (c'est-à-dire que Fiddler a géré le problème pour vous), vous devriez pouvoir le résoudre à l'aide de l'indicateur UseUnsafeHeaderParsing.

Si vous cherchez un moyen de définir cette valeur par programmation, voyez les exemples ici: http://o2platform.wordpress.com/2010/10/20/dealing-with-the-server-committed-a-protocol -violation-sectionresponsestatusline /

8
Dinis Cruz

Beaucoup de solutions parlent d'une solution de contournement, mais pas de la cause réelle de l'erreur.

Une cause possible de cette erreur est si le serveur Web utilise un codage autre que ASCII ou ISO-8859-1 Pour générer la section de réponse de l'en-tête. La raison d'utiliser ISO-8859-1 Serait si le Response-Phrase Contient des caractères latins étendus.

Une autre cause possible de cette erreur est si un serveur Web utilise UTF-8 Pour générer le marqueur d'octet-ordre (BOM). Par exemple, la constante par défaut Encoding.UTF8 Génère la nomenclature, ce qui est facile à oublier. Les pages Web fonctionneront correctement dans Firefox et Chrome, mais HttpWebRequest bombardera :). Une solution rapide consiste à changer le serveur Web pour utiliser le codage UTF-8 qui ne génère pas la nomenclature, par exemple. new UTF8Encoding(false) (qui est OK tant que le Response-Phrase ne contient que des caractères ASCII, mais il faut utiliser ASCII ou ISO-8859-1 Pour les en-têtes, puis UTF-8 Ou un autre codage pour la réponse).

8
Loathing

Skype était la cause principale de mon problème:

Cette erreur se produit généralement lorsque vous avez configuré Visual Studio pour déboguer une application Web existante s'exécutant dans IIS plutôt que dans ASP.NET intégré serveur Web de débogage. IIS écoute par défaut les demandes Web sur le port 80. Dans ce cas, une autre application écoute déjà les demandes sur le port 80. En règle générale, l'application incriminée est Skype, qui remplace par défaut l'écoute sur les ports 80 et 443 une fois installé. Skype occupe déjà le port 80. Donc, IIS ne peut pas démarrer.

Pour résoudre le problème, suivez les étapes suivantes:

Skype -> Outils -> Options -> Avancé -> Connexion:

Décochez la case "Utiliser les ports 80 et 443 comme alternatives pour les connexions entrantes".

Et comme indiqué ci-dessous effectuez une réinitialisation IIS une fois terminé.

6
AltF4_

La définition de expect 100 continue à false et la réduction du temps d'inactivité de la socket à deux secondes a résolu le problème pour moi.

ServicePointManager.Expect100Continue = false; 
ServicePointManager. MaxServicePointIdleTime = 2000; 
6
Prashan Pratap

J'ai essayé d'accéder à l'API Last.fm Rest de derrière un proxy et j'ai cette erreur célèbre.

Le serveur a commis une violation de protocole. Section = ResponseStatusLine

Après avoir essayé des solutions de contournement, seuls ces deux-là ont fonctionné pour moi

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

et

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

Une cause probable de ce problème est la configuration WPAD (Web Proxy Auto Discovery Protocol) sur le réseau. La demande HTTP sera envoyée de manière transparente à un proxy pouvant renvoyer une réponse que le client n'acceptera pas ou n'est pas configurée pour accepter. Avant de pirater votre code en bits, vérifiez que WPAD n'est pas en jeu, en particulier si cela vient de "se produire" à l'improviste.

2
Skrymsli

Aucune des solutions ne fonctionnant pour moi, j'ai donc dû utiliser un WebClient au lieu d'un HttpWebRequest et le problème n'était plus.

J'avais besoin d'utiliser un CookieContainer, j'ai donc utilisé la solution publiée par Pavel Savara dans ce fil de discussion - tilisation de CookieContainer avec la classe WebClient

supprimez simplement "protected" de cette ligne:

private en lecture seule CookieContainer conteneur = new CookieContainer ();

2
TH Todorov

Mon problème était que j'ai appelé https endpoint avec http.

2
gneric

La première chose que nous avons essayée était de désactiver la compression de contenu dynamique pour IIS, ce qui a résolu les erreurs, mais l'erreur n'a pas été causée du côté serveur et un seul client a été affecté par cela.

Côté client, nous avons désinstallé les clients VPN, réinitialisé les paramètres Internet, puis réinstallé les clients VPN. L'erreur pourrait également être causée par un antivirus précédent doté d'un pare-feu. Ensuite, nous avons activé la compression de contenu dynamique et cela fonctionne maintenant comme avant.

Une erreur est apparue dans une application personnalisée qui se connecte à un service Web et également à TFS.

1
HasanG

Consultez votre code et trouvez si vous définissez un en-tête avec une valeur NULL ou vide.

0
Abdul Rauf

J'ai commencé à avoir cette erreur de mes services php JSON/REST

J'ai commencé à avoir l'erreur relative relative rare POST uploadé après avoir ajouté ob_start("ob_gzhandler")] au script GET le plus fréquemment utilisé

Je ne peux utiliser que ob_start(), et tout va bien.

0
Patrick

Dans mon cas, le IIS ne disposait pas des autorisations nécessaires pour accéder au chemin ASPX approprié.

J'ai donné à IIS des autorisations d'utilisateur pour le répertoire approprié et tout allait bien.

0
Vaiden