2009-09-29 7 views
13

J'ai créé un exemple d'application asp.net et j'essaie d'extraire des données de mon serveur en utilisant httpwebrequest. Mais quelques fois j'ai eu cette erreur ci-dessus. J'ai fait quelques recherches sur google mais tous disent que vous devriez ajouter la propriété "<httpWebRequest useUnsafeHeaderParsing="true" />" dans web.config.HttpWebRequestError: le serveur a commis une violation de protocole. Section = ResponseHeader Detail = CR doit être suivi de LF

Cette propriété a le mot 'UNSAFE', donc je suis trop inquiète à ce sujet.Je ne peux pas ajouter cela est dans la configuration de mon site.Il y a une autre option pour lire la réponse de mon URL de raclage.S'il vous plaît laissez-moi savoir comment peut-il être possible sans « <httpWebRequest useUnsafeHeaderParsing="true" /> »

Merci à l'avance, Laxmilal Menaria

+0

J'ai vu un cas différent avec la même erreur - Le mécanisme de mise en cache [Imperva's Incapsula] (https://www.incapsula.com/cdn-content-delivery-network/caching.html) a tenté de mettre en cache une réponse spécifique . donc, au lieu de rediriger vers le serveur réel, * Incapsula * a répondu avec la même réponse, mais d'une certaine manière, les en-têtes étaient un peu différents et ne respectaient pas Windows CR-LF (\ r \ n). – itsho

Répondre

19

Ceci est certainement un serveur problem-- le serveur ne suit pas la spécification HTTP et le client .NET est en berne ce comme Je ne pense pas qu'il y ait un gros problème de sécurité ici, seulement un non-respect de la RFC qui est mauvais mais malheureusement pas rare.

Alors, que vous avez trouvé dans Google, la façon de contourner le problème est d'appliquer la modification de la configuration suivante:

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

Si vous vous demandez où ajouter ceci, regardez dans l'explorateur de solution pour 'App.config'. –

2

Une façon de déboguer cela (et pour vous assurer qu'il est la violation du protocole est à l'origine du problème), est d'utiliser Fiddler (Http Web Proxy) et voir 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 le drapeau UseUnsafeHeaderParsing.

Si vous êtes à la recherche d'un moyen de définir cette valeur voir les exemples ici programatically: http://o2platform.wordpress.com/2010/10/20/dealing-with-the-server-committed-a-protocol-violation-sectionresponsestatusline/

2

Une autre possibilité: lorsque vous faites un POST, le serveur répond avec un 100 continue d'une manière incorrecte.

Ce résolu le problème pour moi:

request.ServicePoint.Expect100Continue = false;

Questions connexes