2010-02-17 5 views
1

J'ai une page Web ASP classique dans laquelle j'appelle une source XML en utilisant MSXML2 sur une boîte IIS. MSXML2 nécessite une URL complète http://www.dom.com/path etc et tout cela fonctionne très bien jusqu'à ce que j'ai essayé d'installer sur un serveur derrière un changement de contenu sur https url. Après un débogage, j'ai établi que le commutateur de contenu n'avait pas de chemin pour le trafic http, donc l'appel de l'url http a échoué. J'ai pu corriger cela et changer l'URL cible en https. Comme ce code est utilisé à la fois sur http et maintenant sur https, j'ai voulu changer le type d'URL en code, donc j'ai eu du code fork.Comment savoir si l'URL demandée est HTTPS derrière un commutateur de contenu qui appelle le serveur sur http?

Je throught ce serait facile et que cela ferait l'affaire

if Request.ServerVariables("HTTPS") = "off" then 

Mais le commutateur de contenu maintiennent le cert pas le serveur web qui est le plan du trafic http

Quelqu'un peut-il penser à façon que je peux dire ce que l'URL complète avec https/http ou de toute autre manière, je peux le réparer.

Un grand merci Paul

+0

Si vous essayez Request.ServerVariables ("SERVER_PORT") sous SSL, renvoyez-vous correctement 443? – Jakkwylde

+0

Il pourrait vous aider à donner vos raisons d'utiliser une URL complète au lieu de l'URL relative en premier lieu? Je ne peux pas penser à une raison pour vous de faire cela, même si je suis sûr qu'il doit y avoir des scénarios où c'est nécessaire. – AnthonyWJones

+0

@Jakkwylde: La question décrit une sorte d'appliance entre le client et le serveur. C'est l'appareil fait une sorte d'opération de proxy inverse. – AnthonyWJones

Répondre

1

Il est difficile de répondre à cette sans connaissance détaillée de l'appareil qui vous appellent un « commutateur de contenu », quel qu'il soit.

Peut-être le meilleur endroit pour commencer serait cette simple page ASP: -

<% 

Dim vntKey 

For Each vntKey In Request.ServerVariables 
    Response.Write vntKey & " = " & Server.HTMLEncode(Request.ServerVariables(vntKey)) & "<br />" 
Next 

%> 

Hit ce via HTTPS sur le client, la liste des en-têtes HTTP qui apparaît peut révéler des en-têtes personnalisés supplémentaires ajoutés par le appareil qui peut vous permettre de faire la détermination dont vous avez besoin.

Modifier

Une alternative pourrait être de configurer votre serveur interne à l'écoute sur les ports 80 et dire 8080. Configurer le proxy inverse pour transmettre les requêtes arrivant sur 443 au port 8080 de votre serveur. Vous pouvez maintenant détecter HTTPS car la demande est arrivée à 8080 sur votre serveur interne.

+0

Le commutateur de contenu est un proxy inverse et il convertit toutes les requêtes HTTPS en HTTP vers les serveurs IIS. Donc je ne peux pas faire les tests SSL normaux – Pbearne

+0

@Pbearne: Ok. De nombreux proxys inverses ajouteront des en-têtes supplémentaires aux demandes qu'ils transmettent au serveur interne. Le code ci-dessus vous permettra de découvrir tout ce qui peut être présent et peut être utile pour faire une détermination. – AnthonyWJones

1

Vous devez modifier le commutateur de contenu pour envoyer un en-tête spécial si la demande d'origine est arrivée via https. Nous utilisons Zeus ZXTM où je travaille et je peux ajouter une règle de trafic qui dit que si la requête commence par https, ajouter un en-tête appelé "FROM_SSL" avec la valeur true. Je vérifie ensuite cet en-tête à l'arrière, plutôt que d'utiliser le matériel intégré.