J'ai créé un programme, essayé de publier 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?
c#
httpwebrequest
patel manish
la source
la source
Parfois, cette erreur se produit lorsque
UserAgent
paramètre de demande est vide (dans l'api github.com dans mon cas).La définition de ce paramètre sur une chaîne personnalisée non vide a résolu mon problème.
la source
WebClient
ici stackoverflow.com/a/11841680/4795214HttpClient
add:client.DefaultRequestHeaders.Add("User-Agent", "Anything");
line pour corriger.Le coupable dans mon cas était de renvoyer une
No Content
réponse mais de définir un corps de réponse en même temps. Que cette réponse me rappelle, et peut-être aux autres, de ne pas renvoyer uneNoContent
réponse avec un corps .Ce comportement est cohérent avec 10.2.5 204 No Content de la spécification HTTP qui dit:
la source
The server committed a protocol violation. Section=ResponseStatusLine
erreur lors de l'utilisation de WebApi pour renvoyer uneNoContent()
réponse personnalisée qui envoyaitNo Content
la réponse pour une raison étrange! Une fois que j'ai éliminé cela, le problème a disparu :)someContent
dereturn Request.CreateResponse(HttpStatusCode.NoContent, someContent);
+1Autre possibilité: lors d'un POST, le serveur répond par un 100 continue de manière incorrecte.
Cela a résolu le problème pour moi:
la source
var http = new HttpClient(); http.DefaultRequestHeaders.ExpectContinue = false;
Cela se produisait pour moi lorsque Skype fonctionnait sur ma machine locale. Dès que j'ai fermé, l'exception a disparu.
Idée gracieuseté de cette page
la source
Une façon de déboguer cela (et de vous assurer que c'est la violation de protocole qui est à l'origine du 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 être en mesure de le résoudre à l'aide de l'indicateur UseUnsafeHeaderParsing.
Si vous cherchez un moyen de définir cette valeur par programme, consultez les exemples ici: http://o2platform.wordpress.com/2010/10/20/dealing-with-the-server-committed-a-protocol-violation-sectionresponsestatusline /
la source
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 codage autre que
ASCII
ouISO-8859-1
pour afficher la section de réponse d'en-tête. La raison à utiliserISO-8859-1
serait si leResponse-Phrase
contient des caractères latins étendus.Une autre cause possible de cette erreur est si un serveur Web utilise
UTF-8
qui génère le marqueur d'ordre d'octet (BOM). Par exemple, la constante par défautEncoding.UTF8
génère la nomenclature, et il est facile de l'oublier. Les pages Web fonctionneront correctement dans Firefox et Chrome, maisHttpWebRequest
bombarderont :). Une solution rapide consiste à changer le serveur Web pour utiliser le codage UTF-8 qui ne génère pas la nomenclature, par exemplenew UTF8Encoding(false)
(ce qui est correct tant que le serveurResponse-Phrase
ne contient que des caractères ASCII, mais il devrait vraiment utiliserASCII
ouISO-8859-1
pour les en-têtes, puisUTF-8
ou un autre encodage pour la réponse).la source
La définition de expect 100 continue à false et la réduction du temps d'inactivité du socket à deux secondes a résolu le problème pour moi
la source
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 s'exécutant dans IIS plutôt que dans ASP.NET intégré serveur Web de débogage intégré. IIS par défaut écoute 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 général, l'application incriminée est Skype, qui par défaut prend en charge l'écoute sur les ports 80 et 443 une fois installée. 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écochez "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 source
J'ai essayé d'accéder à l'API Last.fm Rest derrière un proxy et j'ai obtenu cette fameuse erreur.
Après avoir essayé quelques solutions de contournement, seuls ces deux ont fonctionné pour moi
et
la source
Aucune des solutions n'a fonctionné 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 - Utilisation de CookieContainer avec la classe WebClient
supprimez simplement "protected" de cette ligne:
private readonly CookieContainer container = new CookieContainer ();
la source
Une cause probable de ce problème est la configuration du protocole WPAD (Web Proxy Auto Discovery Protocol) sur le réseau. La requête HTTP sera envoyée de manière transparente à un proxy qui peut 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 commencé à se produire» à l'improviste.
la source
Mon problème était que j'ai appelé
https
endpoint avechttp
.la source
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 côté serveur et un seul client a été affecté par cela.
Du 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 réactivé la compression de contenu dynamique et maintenant cela fonctionne bien comme avant.
Une erreur est apparue dans l'application personnalisée qui se connecte à un service Web et également à TFS.
la source
Dans mon cas, l'IIS n'avait pas les autorisations nécessaires pour accéder au chemin ASPX pertinent.
J'ai donné à l'utilisateur IIS les autorisations d'accès au répertoire concerné et tout allait bien.
la source
Consultez votre code et trouvez si vous définissez un en-tête avec une valeur NULL ou vide.
la source
J'ai commencé à recevoir cette erreur de mes services php JSON / REST
J'ai commencé à recevoir l'erreur des téléchargements POST relativement rares après avoir ajouté
ob_start("ob_gzhandler")
au script GET php le plus fréquemment consultéJe suis capable d'utiliser juste
ob_start()
, et tout va bien.la source