La migration ASP classique - IIS 5 vers IIS 6 pose des problèmes de mise en cache des images?

StackOverflow https://stackoverflow.com/questions/304749

  •  08-07-2019
  •  | 
  •  

Question

Veuillez nous excuser par avance pour cette longue question.

Je suis vraiment un programmeur de bases de données, mais j'ai hérité de la prise en charge d'une application intranet ASP classique, récemment migrée d'IIS 5 vers un nouveau serveur exécutant IIS 6. Le nombre d'utilisateurs est d'environ une douzaine, tous utilisant IE. 6.

L’interface utilisateur affiche les hiérarchies des éléments renvoyés d’une base de données, en utilisant une combinaison de listes non ordonnées HTML et de javascript pour masquer / développer les branches lorsque l’utilisateur navigue.

Les images sont affichées à côté de la liste des membres avec CSS (en utilisant list-style-image), en utilisant une image différente pour chaque type d'élément. Le nombre de types d'éléments différents (et donc d'images) dans une hiérarchie varie entre 2 et 10. Les hiérarchies varient entre 20 et 200 éléments.

Le problème:

Depuis la migration vers IIS 6, plusieurs utilisateurs ont rencontré un problème qui semble être dû au fait que les images ne sont pas correctement appliquées à un ou plusieurs éléments de la hiérarchie. la liste s'affiche correctement, mais une ou plusieurs images sont manquantes et le fait de cliquer sur un lien entraîne le chargement d'une page vide.

L'analyse du trafic réseau à l'aide de Wireshark et des journaux IIS montre que le problème ne concerne pas le serveur: tout le contenu a été correctement fourni au client.

Le problème semble être lié à la mise en cache du contenu sur le client: il semble toucher plus souvent les utilisateurs qui n'avaient pas déjà utilisé l'application sur leur ordinateur actuel ou ne l'utilisaient pas depuis un certain temps. De plus, je peux reproduire le problème environ une tentative sur trois en lançant une session, en effaçant le cache de mon navigateur, puis en actualisant la page. Toutefois, il en va de même pour l'application lors de l'exécution sur IIS 5; ce problème a donc peut-être existé avant la migration vers IIS 6 mais s'est produit moins fréquemment. De temps en temps, si je quitte la session pendant environ 20 minutes, le navigateur semble "rechercher". les images manquantes et tout fonctionne correctement.

Si vous accédez à l'application via un proxy local (j'ai utilisé Fiddler), le problème ne se produit jamais, bien que le journal de connexion du Fiddler indique qu'une ou plusieurs connexions établies sur le serveur pour récupérer les images ont été abandonnées. Comme auparavant, le trafic réseau indique que l'image a été renvoyée par le serveur. Toutefois, l’utilisation du proxy semble permettre à Internet Explorer de trouver dans le cache d’autres copies de l’image récupérées avec succès.

J'ai atteint le point de ma connaissance limitée en matière de débogage des problèmes ASP / IIS. Le fait de supprimer les images de style liste du fichier CSS résout le problème, mais cette option ne doit être utilisée qu'en dernier recours, car elle rend l'application plus difficile à utiliser.

Toutes les suggestions sur la manière dont je pourrais procéder seront reçues avec gratitude.

Modifier

AnonJr suggère qu'il s'agisse d'un problème de configuration client car tous les autres composants semblent fonctionner correctement.

J'ai ignoré un problème de configuration client simple car il s'agit de la seule application concernée par le problème décrit J'ai testé toutes les options sous Outils > Options Internet > Fichiers temporaires > Paramètres sans changement de comportement.

Quelles autres options de configuration du client devrais-je envisager?

Modifier 2 - une solution

La réponse acceptée m'a incité à rechercher un problème connu d'IE6 demandant plusieurs copies d'images lorsque HTML est généré à partir d'un script côté client - http://support.microsoft.com/default.aspx?scid=kb;en-us;319546 .

L'article (après avoir indiqué que ce problème était "de par sa conception") suggère de contourner le problème en mettant en cache les images requises en les chargeant dans une DIV invisible:

<DIV style='display:none'><IMG SRC='image.gif'></DIV>

Cela semble fonctionner pour moi - je ne peux plus reproduire le problème en effaçant le cache de mon navigateur au milieu d'une session, et un tracé Fiddler montre chaque image

Était-ce utile?

La solution

Cela ressemble à un bogue IE6 dans lequel le navigateur fait plusieurs demandes pour la même ressource. Par exemple, si le contenu demande l'affichage d'une petite icône répétée 20 fois dans une liste, au lieu de simplement récupérer cette image une fois, il tente de le récupérer 20 fois. OK 19 des réponses sont 304 Non modifié, mais il reste 19 allers-retours supplémentaires vers le serveur.

J'ai déjà constaté avec cette demande excessive que vous vous retrouviez avec trop de demandes non satisfaites. À ce stade, les requêtes supplémentaires adressées au serveur, même pour les autres pages, ont du mal à obtenir une réponse, du moins pendant un certain temps.

Je ne suis pas sûr que ce soit ce qui se passe dans votre cas. Une façon de procéder consiste à utiliser IE7 au lieu de voir si vous rencontrez le même problème, ce bogue a été corrigé dans IE7.

Modifier : maintenant que le problème est confirmé comme étant le bogue que je vous ai référé, notez également la référence de la base de connaissances à un "délai court". Le problème sous-jacent est que pour pouvoir réutiliser une image extraite récemment, le navigateur doit effectuer un travail différé jusqu'à la fin de la partie actuelle de javascript. Plus qu'une "courte durée" est nécessaire, une approche asynchrone est nécessaire.

J'ai utilisé l'affichage: aucune approche DIV pour la pré-récupération des images et cela fonctionne bien pour un travail de style AJAX. Toutefois, si vous avez du code en cours d'exécution avant ou pendant l'événement onload d'une fenêtre, le problème persiste lors de l'ajout d'images dans ce code. Un setTimeout est nécessaire pour pouvoir exécuter du code supplémentaire une fois l'événement onload terminé.

Autres conseils

Vous voudrez peut-être concentrer votre attention sur le réglage des paramètres de mise en cache du côté client. Si les images sont envoyées par le serveur, il est peu probable que ce soit un problème IIS. Si le code HTML des images est envoyé au navigateur, il ne s'agit pas d'un problème ASP. Cela laisse le client.

Le proxy peut atténuer certains problèmes et / ou peut expliquer la façon dont IE6 décide de mettre en cache des images, etc.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top