Le serveur a commis une violation du protocole. Section=Reponsestatusline ERROR

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 corriger cette exception?

100
demandé sur Mualig 2010-03-20 13:50:52

17 réponses

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 à false.

64
répondu Darin Dimitrov 2010-03-20 10:54:38

parfois, cette erreur se produit lorsque le paramètre de requête UserAgent est vide (en github.com api in my case).

paramétrer ce paramètre à la chaîne custom not empty a résolu mon problème.

54
répondu Ivan Kochurkin 2014-03-02 23:12:43

dans mon cas, le coupable retournait une réponse No Content , mais définissait en même temps un corps de réponse. Puisse cette réponse me rappeler et peut-être d'autres de ne plus jamais retourner une NoContent réponse avec un corps .

ce comportement est compatible avec 10.2.5 204 pas de contenu de la spécification HTTP qui dit:

la réponse 204 ne doit pas inclure un corps de message, et donc est toujours résilié par la première ligne vide après les champs d'en-tête.

24
répondu Tobias 2014-04-29 22:11:44

une autre possibilité: en faisant un POST, le serveur répond avec un 100 continue d'une manière incorrecte.

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

request.ServicePoint.Expect100Continue = false;
9
répondu marq 2014-08-19 17:45:58

cela se passait pour moi quand J'ai eu Skype fonctionnant sur ma machine locale. Dès que j'ai fermé, l'exception a disparu.

idée courtoisie de cette page

9
répondu Luke 2015-06-03 18:36:12

de nombreuses 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 encodage autre que ASCII ou ISO-8859-1 pour afficher la section de réponse de l'en-tête. La raison d'utiliser ISO-8859-1 serait que le Response-Phrase contient des caractères latins étendus.

une autre cause possible de cette erreur est si un serveur web utilise UTF-8 qui l'ordre des octets de marqueur (BOM). Par exemple, la constante par défaut Encoding.UTF8 affiche le BOM, et il est facile de l'oublier. Les pages web fonctionneront correctement dans Firefox et Chrome, mais HttpWebRequest bombera :). Une solution rapide est de changer le serveur web pour utiliser L'encodage UTF-8 qui ne produit pas le BOM, par exemple new UTF8Encoding(false) (qui est OK aussi longtemps que le Response-Phrase ne contient que des caractères ASCII, mais vraiment il devrait utiliser ASCII ou ISO-8859-1 pour les en-têtes, et puis UTF-8 ou un autre encodage pour la réponse).

8
répondu Loathing 2015-01-03 10:10:11

une façon de déboguer ceci (et de s'assurer que c'est la violation du protocole qui cause le problème), est d'utiliser Fiddler (mandataire Web Http) et de voir si la même erreur se produit. Si ce n'est pas le cas (c.-à-d. que Fiddler a géré le problème pour vous), alors vous devriez être en mesure de le corriger en utilisant le drapeau UseUnsafeHeaderParsing.

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

7
répondu Dinis Cruz 2010-10-20 11:42:16

réglage expect 100 continuer à false et la réduction du temps de ralenti socket à deux secondes résolu le problème pour moi

ServicePointManager.Expect100Continue = false; 
ServicePointManager. MaxServicePointIdleTime = 2000; 
6
répondu Prashan Pratap 2014-08-19 17:46:09

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

cette erreur se produit généralement lorsque vous avez configuré Visual Studio pour déboguer une application Web existante tournant dans IIS plutôt que dans le ASP.NET debug Web server. IIS par défaut écoute les requêtes web sur le port 80. Dans ce cas, une autre application est déjà à l'écoute des requêtes sur le port 80. Typiquement, L'application incriminée est Skype, qui par défaut prend sur écoute sur les ports 80 et 443 une fois installés. Skype occupe déjà le port 80. Donc IIS est incapable de commencer.

pour résoudre le problème suivre les étapes:

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

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

et comme indiqué ci-dessous effectuer une réinitialisation IIS une fois fait.

6
répondu AltF4_ 2016-06-23 15:43:31

j'ai essayé d'accéder au dernier.FM reste API de derrière un proxy et a obtenu cette erreur célèbre.

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

après avoir essayé quelques solutions de rechange, seulement ces deux-là ont travaillé 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
répondu nixda 2016-02-05 08:53:18

aucune des solutions n'a fonctionné pour moi, donc j'ai dû utiliser un WebClient au lieu d'une HttpWebRequest et le problème n'était plus.

j'avais besoin d'utiliser un CookieContainer, donc j'ai utilisé la solution posté par Pavel Savara dans ce fil - en utilisant CookieContainer avec la classe WebClient

il suffit de supprimer "protégé" de cette ligne:

private readonly CookieContainer container = new CookieContainer();

2
répondu TH Todorov 2017-05-23 12:10:41

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

côté client, nous avons désinstallé les clients VPN, réinitialisé les paramètres internet et réinstallé les clients VPN. L'erreur pourrait aussi être causée par un antivirus précédent qui avait un pare-feu. Ensuite, nous avons permis la compression de contenu dynamique et maintenant il fonctionne comme avant.

erreur apparu dans l'application personnalisée qui se connecte à un service web et aussi à TFS.

1
répondu x-freestyler 2015-11-05 09:12:22

mon problème est que j'ai appelé https endoipint avec http .

1
répondu gneric 2018-05-28 11:51:37

dans mon cas, L'IIS n'avait pas les permissions nécessaires pour accéder au chemin ASPX concerné.

j'ai donné les permissions de l'utilisateur IIS au répertoire approprié et tout allait bien.

0
répondu Vaiden 2015-06-07 13:27:03

voir votre code et trouver si vous définissez un en-tête avec une valeur nulle ou vide.

0
répondu Abdul Rauf 2015-11-03 06:51:23

j'ai commencé à obtenir cette erreur à partir de mes services php JSON / REST

j'ai commencé à obtenir l'erreur de relativley rare post uploads après que j'ai ajouté ob_start("ob_gzhandler") au script le plus fréquemment consulté GET php

je suis capable d'utiliser juste ob_start() , et tout va bien.

0
répondu Patrick 2017-12-08 05:27:19

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 mandataire qui peut renvoyer une réponse que le client n'accepte pas ou qui n'est pas configuré pour accepter. Avant de hacker votre code en bits, vérifiez que WPAD n'est pas en jeu, en particulier si cela "a commencé à se produire" à l'improviste.

0
répondu Skrymsli 2018-08-22 22:29:02