Utz: (BROWSER) Darf Browser dynamische Seiten aus dem Cache holen?

Hallo zusammen,

ich habe folgendes Konstrukt:

Formular 1 --> Formular 2 --> Überprüfung der Daten. Ggf. wird eine Korrektur gewünscht, dann geht es zurück zu Formular 1. Alles sind ASP-Seiten.

Mit Opera 7 tritt folgendes Problem auf: allem Anschein nach holt er Formular 1 (wenn von der Überprüfungsseite aus aufgerufen, das ist ein "normaler" <a href="...">-Link) aus dem Cache, sodass gemachte Einträge nicht sichtbar sind. Nach einem Reload sind sie dann da. Bei den anderen Seiten, die über <form> aufgerufen werden, werden die Seiten vom Server abgerufen, also das erwartete Verhalten.

Mit anderen getesten Browser (NS 4, Mozilla, IE 5 & 6) tritt dieses Verhalten _nicht_ auf.

Hier meine Fragen:

Von dieser Annahme bin ich bisher ausgegangen: Beim Aufruf einer Seite über <a href="..."> mit potentiell dynamischem Inhalt (erkennbar an Dateiendung) müsste der Browser die Seite auf jeden Fall vom Server abholen und nicht aus dem Cache. Ist diese Annahme falsch, gilt das nur für per Formular angeforderte Seiten? (Dann müsste ich meine komplette Architektur überdenken)

Falls diese Annahme richtig ist und Opera 7 sich also schräg verhält, fällt jemandem noch ein anderer Workaround ein als:

  • per JavaScript Reload auslösen
  • Seite halt über sinnloses Formular anfordern
  • durch zufällig angehängte Parameter (z.B. ?para=[Uhrzeit]) den Browser glauben machen, es sei etwas anderes.

Diese drei gefallen mir nämlich aus Prinzipienreiterei nicht.

Grüße,

Utz

  1. Hallo,

    Von dieser Annahme bin ich bisher ausgegangen: Beim Aufruf einer Seite über <a href="..."> mit potentiell dynamischem Inhalt (erkennbar an Dateiendung) müsste der Browser die Seite auf jeden Fall vom Server abholen und nicht aus dem Cache. Ist diese Annahme falsch, gilt das nur für per Formular angeforderte Seiten? (Dann müsste ich meine komplette Architektur überdenken)

    Darauf dass Seiten mit dynam. Inhalt automatisch neugeladen werden kann man sich in der Tat nicht verlassen. Hast Du entsprechende Meta-tags in den <head> gesetzt? http://selfhtml.teamone.de/html/kopfdaten/meta.htm
    Von besonderem Interesse duerften die folgenden sein, die kommen bei mir immer auf dyn. Seiten zum Einsatz:
       <meta http-equiv="expires" content="0">
       <meta http-equiv="cache-control" content="no-cache">
       <meta http-equiv="pragma" content="no-cache">

    Gruss, Mel

    1. Hi Mel,

      Hast Du entsprechende Meta-tags in den <head> gesetzt?

      Örgl...peinlich! Hatte ich völlig verpennt. Wo krieg ich jetzt ne Entschuldigung für diesen Anfängerfehler her? Irgendwas wie: wenn der komplette Head aus ner Include-Datei kommt kann man das schon mal übersehen? Komm ich damit durch?

      Danke jedenfalls!

      Grüße,

      Utz

      1. Hi Utz,

        Örgl...peinlich! Hatte ich völlig verpennt. Wo krieg ich jetzt ne Entschuldigung für diesen Anfängerfehler her? Irgendwas wie: wenn der komplette Head aus ner Include-Datei kommt kann man das schon mal übersehen? Komm ich damit durch?

        *grins*
        Immerhin wird Dir der include das einfuegen der meta-tags erheblich erleichtern ;)

        gruss, Mel

  2. Moin!

    Von dieser Annahme bin ich bisher ausgegangen: Beim Aufruf einer Seite über <a href="..."> mit potentiell dynamischem Inhalt (erkennbar an Dateiendung) müsste der Browser die Seite auf jeden Fall vom Server abholen und nicht aus dem Cache. Ist diese Annahme falsch, gilt das nur für per Formular angeforderte Seiten?

    Diese Annahme ist deshalb falsch, weil ein Browser keine "Dateiendung" kennt. Er kennt einen Ressourcennamen. Dieser Name hat aber absolut keinerlei Bedeutung für den Dateinamen. Es wäre ja auch schlimm, wenn es so wäre: Neue Servertechnologien entwickeln sich am laufenden Band - wie sollte ein Browser alle Dateiendungen kennen, die man so produzieren kann. Der Browser erhält lediglich einen Mime-Typ, der definiert, wie der Browser mit dem Inhalt umgehen soll.

    Wenn du das Caching beeinflussen willst (du kannst es sowohl explizit verbieten, als auch explizit erlauben), solltest du entsprechende HTTP-Headerangaben senden. Die Benutzung der von Mel genannten Meta-Angaben funktioniert zwar im Prinzip auch, ist aber suboptimal, wenn man es mit echten HTTP-Headern besser lösen kann.

    - Sven Rautenberg

    --
    "Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)
    1. Hallo Sven,

      (...) wie sollte ein Browser alle Dateiendungen kennen, die man so produzieren kann.

      In meiner Naivität hab ich mich versucht in jemanden hineinzuversetzen, der einen Browser programmiert und hatte mir das so gedacht: man geht von den derzeit bekannten Dateiendungen; bei denen, die statische Seiten suggerieren, wird gecacht, bei allen anderen, also auch allen unbekannten, nicht. So denke ich ginge das zumindest _theoretisch_.

      Naja, hatte mich da irgendwie reinverstiegen, weil ich aufgrund von Betriebsblindheit völlig ausgeblendet hatte, dass man das Cachen ja beeinflussen kann.

      (...) ist aber suboptimal, wenn man es mit echten HTTP-Headern besser lösen kann.

      Die Möglichkeit habe ich, hab mich aber bisher immer davor gedrückt. Guter Zeitpunkt, um mal damit rumzuspielen.

      Grüße,

      Utz