Oliver: GET, POST und Caching: Kanns mir jemand erklären?

Hallo ihr,

ich hab da grad bei meiner Webapplikation folgendes "komisches" Verhalten festgestellt:

  • Browsercache ist eingeschaltet
  • Sende ich zum zweiten Mal eine GET-Anfrage an exakt dieselbe URL, wird (logischerweise) beim zweiten Mal die Seite ausm Cache gezeigt und es findet kein Roundtrip zum Sever statt.
  • Sende ich aber hintereinander zwei POST-Requests mit gleichen Parameter an exakt dieselbe URL, findet jedes Mal ein Roundtrip zum Server statt, der mir eine neue Seite generiert.

Wieso ist das so??? Schalte ich den Cache ab (z.B. via Webdeveloper Toolbar) findet auch bei GET jedes Mal ein Roundtrip statt...

Achso, ich glaub zwar dass es irrelevant ist, aber bei meinen Requests handelt es sich um XMLHttpRequests.

Vielen Dank im Voraus für eure Erklärungen.

Oliver

  1. Ahhh, folgendes hab ich grad im Netz gelesen: "...some browsers cache GET requests via XMLHttpRequest..." - alles klar, warum auch immer.

  2. Hallo Oliver,

    ein paar Zitate aus RFC2616:

    • Sende ich zum zweiten Mal eine GET-Anfrage an exakt dieselbe URL, wird (logischerweise) beim zweiten Mal die Seite ausm Cache gezeigt und es findet kein Roundtrip zum Sever statt.

    The response to a GET request is cacheable if and only if it meets
       the requirements for HTTP caching described in section 13.

    • Sende ich aber hintereinander zwei POST-Requests mit gleichen Parameter an exakt dieselbe URL, findet jedes Mal ein Roundtrip zum Server statt, der mir eine neue Seite generiert.

    Responses to this method are not cacheable, unless the response
       includes appropriate Cache-Control or Expires header fields. However,
       the 303 (See Other) response can be used to direct the user agent to
       retrieve a cacheable resource.

    Vielleicht hilft Dir das ja weiter ...

    Freundliche Grüße

    Vinzenz

    1. Vielleicht hilft Dir das ja weiter ...

      Wow, das ist natürlich ein wenig fundierter. Klasse, danke.

      Ich häng jetzt eben einfach an jeden GET-Request ne UniqueID an, dann klappts. Oder gibts da ne bessere Möglichkeit???

      mfg, Oliver

      1. Moin!

        Ich häng jetzt eben einfach an jeden GET-Request ne UniqueID an, dann klappts. Oder gibts da ne bessere Möglichkeit???

        Natürlich gibt es die. Schicke passende Cache-Header von Server aus mit, die Caching verbieten. Dafür sind die schließlich da.

        - Sven Rautenberg

        --
        "Love your nation - respect the others."