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?
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.
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.
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.
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;
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.
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 /
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).
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é.
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;
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;
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.
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 ();
Mon problème était que j'ai appelé https
endpoint avec http
.
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.
Consultez votre code et trouvez si vous définissez un en-tête avec une valeur NULL ou vide.
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.
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.