pl: Ajax POST und Last-Modified

hi, ich logge meine Seitenzugriffe mit Ajax. Das Script hängt hintendran und schickt ein paar Daten per POST an den URL derselben Seite. Die Seite wird mit Last-Modified ausgeliefert. Browser FF cacht die Seite nicht, wenn mein Logger ein POST macht. Sende ich jedoch die Log-Daten per GET, funktioniert das Cachen einwandfrei.

Warum mag FF nicht cachen, wenn POST?

  1. Hallo,

    hi, ich logge meine Seitenzugriffe mit Ajax. Das Script hängt hintendran und schickt ein paar Daten per POST an den URL derselben Seite. Die Seite wird mit Last-Modified ausgeliefert. Browser FF cacht die Seite nicht, wenn mein Logger ein POST macht. Sende ich jedoch die Log-Daten per GET, funktioniert das Cachen einwandfrei.

    den Sinn habe ich jetzt nicht wirklich verstanden, aber sei's drum. Warum einfach, wenn's umständlich auch geht.

    Warum mag FF nicht cachen, wenn POST?

    Ein GET-Request liefert bei gleichem URL und gleichen Parametern (zumindest der Philosophie nach) immer das gleiche Ergebnis. Da lohnt es sich also zu cachen.
    Das Ergebnis eines POST-Requests ist aber vom Inhalt des Request Body und häufig auch vom Gesamt-Kontext abhängig. Ein Cachen wäre hier, zumindest nach der reinen Lehre, sinnlos.

    Ich weiß nicht, ob die FF-Entwickler so denken bzw. gedacht haben, aber das wäre zumindest eine Erklärung, die mir einleuchtet.

    So long,
     Martin

    1. Hallo, Ein GET-Request liefert bei gleichem URL und gleichen Parametern (zumindest der Philosophie nach) immer das gleiche Ergebnis. Da lohnt es sich also zu cachen.

      Wahrscheinlich hast Du es wirklich nicht verstanden. Es geht mir ja nicht darum, den Ajax-Request zu cachen, sondern die Seite in welcher der Ajax-Request am Ende eingebaut ist.

      PS: Die Nested-Ansicht hier ist äußerst unschön.

      1. Hallo pl,

        PS: Die Nested-Ansicht hier ist äußerst unschön.

        • Definiere „äußerst unschön“
        • Klicke bei Nichtgefallen auf ‚Thread-Ansicht‘

        Bis demnächst
        Matthias

        --
        Das Geheimnis des Könnens liegt im Wollen. (Giuseppe Mazzini)
        1. Hallo pl,

          PS: Die Nested-Ansicht hier ist äußerst unschön.

          • Definiere „äußerst unschön“
          • Klicke bei Nichtgefallen auf ‚Thread-Ansicht‘

          Unschön ist, dass hierzu ein Cookie erforderlich ist zum Halten der Einstellung. Oder denkst Du, ich bin zu blöd zum Klicken?

          1. Unschön ist, dass hierzu ein Cookie erforderlich ist zum Halten der Einstellung. Oder denkst Du, ich bin zu blöd zum Klicken?

            Stimmt, ist bisserl unschön. Bei weitem nicht so unschön aber, wie ein Forum, was einem die Browsernavigation via history-back / history-forward nimmmt. SCNR.

      2. Hi,

        Ein GET-Request liefert bei gleichem URL und gleichen Parametern (zumindest der Philosophie nach) immer das gleiche Ergebnis. Da lohnt es sich also zu cachen.

        Wahrscheinlich hast Du es wirklich nicht verstanden. Es geht mir ja nicht darum, den Ajax-Request zu cachen, sondern die Seite in welcher der Ajax-Request am Ende eingebaut ist.

        doch, das hatte ich schon verstanden. Aber es hört sich für mich an, als ob du dieselbe URL einmal per GET abrufst (um die Webseite zu laden), und dann nochmal per POST (für deine Statistik). Dieselbe Ressource einmal mit GET, einmal mit POST? Was soll denn der Browser mit seiner Cache-Verwaltung davon halten?

        PS: Die Nested-Ansicht hier ist äußerst unschön.

        Ich habe noch nie was anderes als Threaded verwendet (außer mal zum Probieren).

        So long,
         Martin

        1. Hi,

          doch, das hatte ich schon verstanden. Aber es hört sich für mich an, als ob du dieselbe URL einmal per GET abrufst (um die Webseite zu laden), und dann nochmal per POST (für deine Statistik). Dieselbe Ressource einmal mit GET, einmal mit POST? Was soll denn der Browser mit seiner Cache-Verwaltung davon halten?

          FF verhält sich wie erwartet, wenn ich per GET logge. D.h., das native GET (Laden der Seite in FF) wird gecached (ergibt status 304), das ajax GET wird nicht gecached (ergibt status 200).

      3. Wahrscheinlich hast Du es wirklich nicht verstanden. Es geht mir ja nicht darum, den Ajax-Request zu cachen, sondern die Seite in welcher der Ajax-Request am Ende eingebaut ist.

        POST-Anfragen sind fürs Caching nicht vorgesehen. Du kannst aber eine 303-Weiterleitung auf die Ergebnisseite machen, dafür gelten dann die normalen Caching-Parameter.

        1. Wahrscheinlich hast Du es wirklich nicht verstanden. Es geht mir ja nicht darum, den Ajax-Request zu cachen, sondern die Seite in welcher der Ajax-Request am Ende eingebaut ist.

          POST-Anfragen sind fürs Caching nicht vorgesehen. Du kannst aber eine 303-Weiterleitung auf die Ergebnisseite machen, dafür gelten dann die normalen Caching-Parameter.

          Darum gehts auch gar nicht, guten morgen.

          1. Darum gehts auch gar nicht, guten morgen.

            Worum dann? Versuch dein Problem doch bitte nochmal anders in präzise Worte zu fassen. Vermeide dabei so nebulöse Aussagen wie "Das Script hängt hintendran".

    2. Hallo,

      hi, ich logge meine Seitenzugriffe mit Ajax. Das Script hängt hintendran und schickt ein paar Daten per POST an den URL derselben Seite. Die Seite wird mit Last-Modified ausgeliefert. Browser FF cacht die Seite nicht, wenn mein Logger ein POST macht. Sende ich jedoch die Log-Daten per GET, funktioniert das Cachen einwandfrei.

      den Sinn habe ich jetzt nicht wirklich verstanden, aber sei's drum. Warum einfach, wenn's umständlich auch geht.

      http://handwerkzeugs.de/ajaxlog.html

      1. http://handwerkzeugs.de/ajaxlog.html

        Mich wundert, dass das Logging bei dir zu einem Performance Problem geführt hat, hast du da Messdaten vorliegen? Und wäre es nicht eine bessere und viel simplere Möglichkeit gewesen, den Logging-Vorgang serverseitig nicht-blockierend auszuführen? Denn so fehlen in den Logs ja beispielsweise schon Zugriffe auf Bilder- oder Stylesheet-Ressourcen. Und wie du selbst gesagt hast, werden einige Bots, die dein JavaScript nicht ausführen, auch nicht in den Logs aufgelistet. Du verkaufst das als Vorteil, aber ich verstehe nicht wieso. Wenn ich die Logs analysiere kann ich ja die Bot-Zugriffe immernoch rausfiltern.