Forum Programmation.web Warning : Page has expires

Posté par  (site web personnel) .
Étiquettes : aucune
-11
5
jan.
2011

Bonjour faux 'rom,

J'ai un *tain de problème avec une application-web au taf'.

De temps en temps, le navigateur (IE 6 o/) affiche le message "Warning : Page has expired". Normalement ce message ce produit quand un formulaire a été soumis et que l'on rafraichit la page ou que l'on clique sur le bouton "Page précédente".

Mais là ça se produit dans un cas de soumission de requête POST des plus classiques ! Et ça se produit de façon hasardeuse.

A noter que l'application-web J2EE hébergée sur un Weblo n'a pas été modifiée et que c'est apparu comme-ça sans prévenir début décembre. On a pour info un frontal IIS.

Qu'est ce qui fait qu'un navigateur affiche ce message "Page has expired" ? C'est suite à la lecture d'un truc dans la requête HTTP ? J'ai réussit à sniffer les requêtes HTTP quand l'erreur a eu lieu mais je n'ai rien vu à ce niveau qui me parait étrange.

Je commence à devenir fou avec ce problème :(

Merci pour ton aide 'rom.

P.S. : Oui IE6, IIS, J2EE vous aller dire que je cherche aussi mais je n'ai pas le choix :)

P.P.S. : voir http://linuxfr.org/users/shift/journaux/impossible-de-commenter-un-contenu-vieux-de-plus-de-3-mois pour la "réponse", postée par IPOT avec la complicité d'un modérateur ;-)

  • # J'ai déjà vu ça quelque part.

    Posté par  . Évalué à 10.

    On en parle ici, de mémoire :
    http://linuxfr.org/~Shift/30643.html

    En espérant que ça aide.
  • # Commentaire bookmark

    Posté par  . Évalué à 3.

  • # Idées

    Posté par  (site web personnel, Mastodon) . Évalué à 1.

    Et si tu essayait avec MSIE4? Ou Netscape 0.92?

    Plus sérieusement, as-tu essayé de sniffer l'échange HTTP? Il y a peut-être un header qui donnerait une direction.

    La gelée de coings est une chose à ne pas avaler de travers.

    • [^] # Re: Idées

      Posté par  . Évalué à 2.

      Vu que ça se produit en début d’année je pencherais pour une comparaison de dates, genre (29 décembre - 05 janvier ≅ -360 jours)…

      Tu as essayé de vider tes caches ? Ou simplement la date (et l’heure) du client par rapport au serveur…
    • [^] # Re: Idées

      Posté par  (site web personnel) . Évalué à 1.

      J'ai sniffé les requêtes HTTP avec Wiresharck mais je n'ai rien vu de spécial si ce n'est qu'après la réception de la page HTML, les requêtes GET pour récupérer les autres éléments ne sont pas lancées. Mais normalement l'erreur "Page has expired" ne se produit que sur un POST.

      J'ai cherché sur le net et je ne trouve personne ayant réussi à avoir ce soucis sans avoir cliqué préalablement sur le bouton "Page précédente" :-(

      L'association LinuxFr ne saurait être tenue responsable des propos légalement repréhensibles ou faisant allusion à l'évêque de Rome, au chef de l'Église catholique romaine ou au chef temporel de l'État du Vatican et se trouvant dans ce commentaire

  • # Commentaire supprimé

    Posté par  . Évalué à 2.

    Ce commentaire a été supprimé par l’équipe de modération.

    • [^] # Re: Problème de cache ?

      Posté par  (site web personnel) . Évalué à 1.

      J'ai exactement les entêtes HTTP de cache dont tu parles.

      Pour ce qui est de testé des modifications de paramétrage de IE c'est haud car ce bug se produit de façon hasardeuse. Dès fois je l'ai 4 fois à la suite et des fois 2 heures sans jamais le voir et pourtant je répète les mêmes actions.

      L'association LinuxFr ne saurait être tenue responsable des propos légalement repréhensibles ou faisant allusion à l'évêque de Rome, au chef de l'Église catholique romaine ou au chef temporel de l'État du Vatican et se trouvant dans ce commentaire

      • [^] # Commentaire supprimé

        Posté par  . Évalué à 2.

        Ce commentaire a été supprimé par l’équipe de modération.

  • # Ça me semble être ça ...

    Posté par  (site web personnel) . Évalué à 3.

    http://support.microsoft.com/?scid=kb;EN-US;Q319792

    Mais je souhaite que ça ne soit pas ça : c'est dans le premier lien donné par google pour "ie 6 page expired" ...

    "It was a bright cold day in April, and the clocks were striking thirteen" - Georges Orwell

  • # mouais

    Posté par  (site web personnel) . Évalué à 4.

    Alors non, ce n'est pas une erreur.

    Joie, c'est un avertissement (sisi, c'est marqué dedans).

    Mieux, il est normal et souhaitable qu'on te le mette cet avertissement. Le problème serait plutôt que parfois on ne te le mette pas.

    Alors voilà, quand tu fais un POST sur HTTP tu envoies des informations. Tu obtiens en retour un document qui résulte de cet envoi. Ca peut être par exemple un message de confirmation.

    Que faire quand tu rafraichis la page ?
    Il a plusieurs cas :
    - Il ne fait rien : mouais, mais tu as demandé quelque chose, donc ce n'est pas la bonne solution
    - Il fait un GET sur la page : pas mieux, GET et POST sont des actions différentes, non seulement il y a toutes les chances que le résultat soit différent de ce que tu attends mais ça a aussi toutes les chances de ne pas fonctionner voire de réaliser une action non souhaitée. Bref, il s'abstient.
    - Il refait la même chose qu'avant, il renvoie les données : mais euh, tu es certain ? ça pourrait envoyer en double ton commentaire, déclencher deux suppressions, créer un doublon dans le système, déclencher une action couteuse alors que tu souhaitais simplement mettre à jour un résultat. Bref, pour éviter les problèmes le navigateur t'avertit avant (c'est chouette hein ? voilà pourquoi c'est un avertissement et pas une erreur).


    Quand tu reviens en arrière la problématique est la même mais il a un choix en plus : renvoyer la page en cache.
    Sauf que HTTP dit que le navigateur ne devrait pas mettre en cache les résultats d'un POST et qu'en plus le navigateur lui ne peut pas savoir si tu veux revenir en arrière avec le cache ou revoir la même action qu'avant (donc à jour). Bref, il choisit et t'avertit que la page a expiré (il ne met pas en cache) et donc qu'il va renvoyer les données, bref, te demande si tu es sûr de toi.

    Après les navigateurs ont des heuristiques, parfois ils utilisent quand même un cache, ça dépend des contextes, de quand date ta visite précédente, et probablement d'autres paramètres.

    Eventuellement, sur ton serveur, si tu veux forcer la mise en cache lors du retour arrière (ça ne changera rien à l'actualisation) ET que tu es conscient que ça risque de poser problème pour ceux qui veulent vraiment réaliser deux fois une action sur la même URL (et pas forcément via le retour arrière, peut être simplement poster deux commentaires différents), tu peux faire un cache-control:public, voire rajouter un max-age dans tes entêtes.


    Sinon souvent ce qui est fait, c'est que le résultat du POST est simplement une redirection vers une autre page (qui elle sera en GET), vers laquelle tu peux revenir en arrière ou réactualiser sans problèmes (par contre si tu reviens en arrière un cran de plus tu retombes sur la page en POST avec le même problème)

    Tu peux aussi t'amuser à envoyer ton POST en xhr pour que ça n'intefere pas avec l'historique du navigateur.
  • # journal

    Posté par  . Évalué à 5.

    la prochaine fois, écris dans un journal, tu auras peut-être plus de réponses

    Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it

    • [^] # Commentaire supprimé

      Posté par  . Évalué à 1.

      Ce commentaire a été supprimé par l’équipe de modération.

  • # au hasard

    Posté par  . Évalué à 2.

    Si ça n'arrivait pas avant, c'est que quelque chose a changé. La date bien sûr, mais on a passé l'an 2000 depuis longtemps. Alors c'est plus certainement une option d'IE. Le plus simple est de tester avec un compte utilisateur tout neuf.

    A tout hasard, et parce que j'ai un vague souvenir d'un cas semblable il y a trèèèès longtemps avec Konqueror:
    C'est peut-être parce que IE6 est toujours ouvert, puisqu'il est préchargé en mémoire. Ainsi quand tu envoies la page résultant du POST, IE se comporte parfois comme si c'était un rafraîchissement de page.

    "La liberté est à l'homme ce que les ailes sont à l'oiseau" Jean-Pierre Rosnay

  • # Je chercherai du côté Frontal IIS

    Posté par  . Évalué à 1.

    Bonjour,

    Il fait quoi exactement le Frontal IIS car si il fait de la répartition de charge sur plusieurs serveurs.

    On peut se demander comment il identifie la session utilisateur.
    Est-ce que le cookie de session est bien maintenu entre chaque requête. Celle-ci va bien du client 1 au serveur 1 et non de temps en temps le serveur 2 qui va lui répondre... "Warning: Page has expired"

    J'ai eu le cas le chez SFR, j'avais un petit appli PHP, à chaque requête , je changeais de serveur, j'avais donc l'impression d'avoir été déconnecté . En fait, il y avait un frontal qui m'envoyait sur un serveur qui n'avait pas du tout connaissance de ma session.

    En ouvrant deux compte utilisateurs, je me suis apperçu que un coup j'étais sur bidule puis sur machin. Ils ont mis un mois pour régler le problème. Je suis parti chez Ovh.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.