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

J’ai créé un programme, essayé de poster une chaîne sur un site et j’ai 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 corriger cette exception?

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

      

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

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

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

Le coupable dans mon cas retournait une réponse No Content mais définissait un corps de réponse en même temps. Que cette réponse me rappelle, à moi et peut-être à d’autres, de ne plus jamais renvoyer une réponse NoContent avec un corps .

Ce comportement est compatible avec 10.2.5 204 No Content de la spécification HTTP qui dit:

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

Une autre possibilité: lorsque vous effectuez un POST, le serveur répond avec un 100 continuer de manière incorrecte.

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

 request.ServicePoint.Expect100Continue = false; 

Cela se passait pour moi quand Skype fonctionnait sur ma machine locale. Dès que j’ai fermé cette exception a disparu.

Idée de courtoisie de cette page

De nombreuses solutions parlent d’une solution de contournement, mais pas de la cause réelle de l’erreur.

L’une des causes possibles de cette erreur est que le serveur Web utilise un codage autre que ASCII ou ISO-8859-1 pour générer la section de réponse à l’en-tête. La raison d’utiliser ISO-8859-1 serait que la Response-Phrase contienne des caractères latins étendus.

Une autre cause possible de cette erreur est la suivante: si un serveur Web utilise UTF-8 qui délivre le marqueur BOM (by-order-marker). Par exemple, la constante Encoding.UTF8 par défaut Encoding.UTF8 la nomenclature et il est facile de l’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) (ce qui est correct tant que la Response-Phrase ne contient que des caractères ASCII) ASCII ou ISO-8859-1 pour les en-têtes, puis UTF-8 ou un autre encodage pour la réponse).

Une façon de déboguer ceci (et de vous assurer que c’est la violation de protocole à l’origine du problème) consiste à utiliser Fiddler (proxy Web Http) et à vérifier si la même erreur se produit. Si ce n’est pas le cas (c’est-à-dire que Fiddler a traité le problème pour vous), vous devriez pouvoir le réparer en utilisant l’indicateur UseUnsafeHeaderParsing.

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

Paramétrer attendre 100 continuer à faux et réduire le temps d’inactivité du socket à deux secondes a résolu le problème pour moi

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

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 exécutée dans IIS plutôt que sur le serveur Web de débogage ASP.NET intégré. IIS écoute par défaut les requêtes Web sur le port 80. Dans ce cas, une autre application écoute déjà les requêtes sur le port 80. En règle générale, l’application incriminée s’appelle Skype, qui prend en charge l’écoute des ports 80 et 443 par défaut. Skype occupe déjà le port 80. IIS ne peut donc pas démarrer.

Pour résoudre le problème, procédez comme suit:

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

Désélectionnez “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é.

J’ai essayé d’accéder à l’API Last.fm Rest à partir d’un proxy et j’ai eu cette fameuse erreur.

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

Après avoir essayé quelques solutions de contournement, seuls ces deux 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; 

Aucune des solutions ne fonctionnait pour moi, alors j’ai 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 – Utiliser CookieContainer avec la classe WebClient

il suffit de supprimer “protégé” de cette ligne:

conteneur en lecture seule CookieContainer = new CookieContainer ();

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

Côté client, nous avons désinstallé les clients VPN, réinitialisé les parameters 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 dynamic et cela fonctionne maintenant comme avant.

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

Mon problème était que j’ai appelé https endoipint avec http .

Dans mon cas, IIS ne disposait pas des permissions nécessaires pour accéder au chemin ASPX correspondant.

J’ai donné les droits d’utilisateur IIS au répertoire approprié et tout allait bien.

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

J’ai commencé à recevoir cette erreur à partir de mes services php JSON / REST

J’ai commencé à recevoir l’erreur de uploads POST rares relativley après avoir ajouté ob_start("ob_gzhandler") au script php GET le plus fréquemment ob_start("ob_gzhandler")

Je suis capable d’utiliser juste ob_start() , et tout va bien.

Une cause probable de ce problème est la configuration WPAD (Web Proxy Auto Discovery Protocol) sur le réseau. La requête HTTP sera envoyée de manière transparente à un proxy qui pourra renvoyer une réponse que le client n’acceptera pas ou n’est pas configuré pour accepter. Avant de pirater votre code en bits, vérifiez que WPAD n’est pas en jeu, en particulier si cela a juste commencé à se produire.