34 votes

Comment définir correctement l'en-tête HTTP avec le module IIS géré ?

J'ai écrit mon propre module HTTP IIS géré en C#. Son but est simplement d'activer les en-têtes de requête X-Forwarded-For et X-Forwarded-Proto à certaines conditions (qui ne peuvent pas être traitées avec des règles de routage). Le module doit être déployé sur notre équilibreur de charge (qui n'est autre que IIS avec ARR installé et des fermes de serveurs configurées). Pour certaines raisons, les en-têtes sont définis mais ne sont pas transmis aux serveurs Web situés derrière l'équilibreur de charge. Je le sais car j'ai vérifié les journaux de sortie de Failed Request Tracing. Failed Request Tracing logs

Et voici une capture d'écran de tous les modules IIS installés sur notre équilibreur de charge :

Ordered module list

Comme vous pouvez le voir, mon module géré appelé "QA.XForwardedHeadersModule" est chargé avant le module natif ApplicationRequestRouting (ARR). Mais les en-têtes ne sont pas transmis de toute façon. J'ai même tracé mes requêtes avec Wireshark. Il n'y a pas du tout d'en-têtes X-Forwarded.

Cela signifie-t-il que les modules gérés ne sont pas entièrement compatibles avec les modules natifs et que les modules natifs (comme ARR) ne peuvent pas voir les en-têtes de demande définis par les modules gérés (comme mon module personnalisé) ? Existe-t-il une solution de contournement de ce problème ?

1voto

Brian Clink Points 166

Il s'agit d'un vieux message "sans réponse", alors je me suis dit que j'allais ajouter mon grain de sel. L'ajout d'en-têtes de demande peut ne pas fonctionner en général, selon la façon dont le module/manipulateur ARR traitera la demande. Il se peut qu'il soit trop tard comme Tarun l'a mentionné, mais pour une autre raison. Le module ARR peut saisir les données brutes reçues, auquel cas il sera certainement trop tard. Ou le gestionnaire ARR peut être en train de regarder des variables de serveur particulières contenant les en-têtes originaux qui ont été définis avant votre notification (par exemple, je ne pense pas que ALL_RAW soit mis à jour si vous ajoutez des en-têtes de demande supplémentaires). Dans le cas probable où le module ARR s'empare de tampons bruts, il vous faudrait prendre les devants et mettre à jour les données brutes, ce qui, si possible, représente un tout autre niveau de complexité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X