2010-09-03 2 views
1

Si un navigateur demande http://site.com/?q=abcUn navigateur peut-il ignorer la sensibilité à la casse de l'en-tête de lieu lorsqu'il répond à une redirection?

et obtient une réponse de redirection 301 à l'emplacement http://site.com/?q=ABC (note cas de querystring)

Est-il possible pour le navigateur d'ignorer la différence dans le cas et redemander http://site.com/?q=abc, ce qui provoque une boucle de redirection infinie?

C'est le scénario qui semble se produire en fonction des journaux IIS. Il semble être isolé à Internet Explorer avec une certaine variation du Demander barre d'outils installé (basé sur les valeurs de l'agent utilisateur). J'ai même installé la barre d'outils Ask, mais je n'ai pas réussi à recréer ce scénario de quelque façon que ce soit.

Je ne peux pas poster le code source, mais pour ceux qui veulent quelque chose, voici la logique générale:

Page_Load(object sender, EventArgs e) 
{ 
    var q = Request.QueryString["q"]; 

    if (q == "ABC") 
    { 
     //render page as usual 
    } 
    else 
    { 
     Response.RedirectPermanent("[thispage]?q=ABC"); 
    } 
} 

Comme vous pouvez le voir, si cette page est demandée avec ?q=abc il sera redirigé une fois, mais alors il va rendre comme d'habitude parce que la redirection va à ?q=ABC.

Y at-il un scénario où le navigateur (en particulier IE avec la barre d'outils Ask) pourrait ignorer le cas de l'emplacement de redirection, provoquant une boucle sans fin?

Répondre

1

Je déteste répondre à ma propre question, mais c'est probablement le meilleur moyen de fermer la boucle. Les redirections excessives étaient en fait et non causées par le code que j'ai posté. J'ai été berné.

Nous avions un HttpModule qui, ironiquement, utilisé le code mentionné dans this answer. Il s'avère que l'installation de certaines versions de la barre d'outils Ask.com sur IE modifie la chaîne user-agent pour inclure 'Ask', ce qui provoque des faux positifs sur ce vérificateur 'IsCrawler'.

Étant donné que 'IsCrawler' a été évalué à true dans ces cas, un chemin de code différent a été exécuté qui a provoqué la boucle de redirection infinie. Le changement de cas de la chaîne de requête résultait de ceci, et non le navigateur Web ignorant l'en-tête de localisation comme je le demandais. Puisque je n'ai même pas vraiment répondu à ma question, si quelqu'un peut poster une réponse faisant autorité pour savoir s'il y a des navigateurs connus ou des scénarios se comportant comme j'ai demandé, je marquerai cela comme la réponse acceptée.

0

Il semble que la barre d'outils Ask s'injecte dans le cycle de requête/réponse utilisé par IE. Je n'ai jamais développé une barre d'outils, mais je parie que c'est assez standard, car les barres d'outils sont utilisées pour détourner l'entrée d'URL tout le temps. Si elle effectue ensuite une analyse interne avant de la rediriger, je pourrais voir un peu de code écrit négligemment faire une comparaison insensible à la casse.

J'espère que vous avez identifié les solutions de contournement évidentes, telles que le renvoi à ?qq=ABC et que votre page de destination utilise soit q ou qq.

+1

Oui, le code devrait certainement être amélioré, mais c'est plus facile à dire qu'à faire. J'essaie juste de vérifier que j'ai correctement identifié la cause du problème. Merci! –

Questions connexes