ChrisB: Apache mod_asis & Last-Modified

Hi,

ich experimentiere gerade ein bisschen mit dem Modul mod_asis vom Apachen (2.2) herum.

Bilder, CSS, Scripte damit ausliefern, alles kein Problem, wenn die passenden HTTP-Header in die jeweiligen Dateien mit hineingeschrieben werden.

Nur, wie kann man damit Caching mittels Last-Modified/If-Modified-Since implementieren?

Wenn ich einen Status
Status: 200 OK
als ersten Header sende, dann ist's mit dem Caching natürlich Essig - trotz Last-Modified-Header. Das ist ja auch recht logisch, schließlich steht der Statuscode 200 OK fest in der Datei mit drin.

Kann ich den Apachen irgendwie dazu bewegen, wenn der Client einen If-Modified-Since im Request mitschickt, zuerst das Änderungsdatum der Datei auf der Festplatte zu checken, und nur mit einem 304 zu antworten und nicht den Dateiinhalt auszuliefern, wenn die Bedingungen entsprechend erfüllt sind ...?

(Die Frage mag eher theoretischer Natur sein und die Gegenfrage „wozu willst du das überhaupt machen?“ provozieren; aber mich würde trotzdem interessieren, ob sich das bewerkstelligen liesse.)

Anbei ein Beispiel, wie ich ein PNG gespeichert habe, um es per mod_asis auszuliefern:

Status: 200 OK  
Last-Modified: Mon, 21 Jun 2010 16:12:43 GMT  
Cache-Control: must-revalidate  
Content-Length: 21221  
Connection: Keep-Alive  
Content-Type: image/png  
  
‰PNG  
[...]

Das Datum im Last-Modified-Header entspricht dabei dem Modified-Datum auf der Festplatte. (Dateisystem: NTFS, Win 7)

Und für das Handling dieser Dateien durch mod_asis sorgt eine .htaccess-Datei mit dem Inhalt

<Files "*">  
ForceType httpd/send-as-is  
</Files>

MfG ChrisB

--
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
  1. Der Name "mod_asis" wie die Doku des Moduls stehen mit der von Dir geforderten Intelligenz im Widerspruch. Via "mod_perl" könntest Du in die fraglichen Phasen der Verarbeitung eingreifen und das gewünschte Verhalten mit überschaubar vielen Zeilen Code umsetzen.

    1. Hi,

      Der Name "mod_asis" wie die Doku des Moduls stehen mit der von Dir geforderten Intelligenz im Widerspruch.

      Ersteres kann man so oder so sehen.

      Ich meine, die „Vorarbeit“, erst mal zu schauen, gibt's die Datei überhaupt, oder muss mit 404 o.ä. geantwortet werden, die muss ja sowieso schon jemand in der Kette „vor“ mod_asis handeln. Hätte ja sein können, dass dieser „jemand“ sich dann bei Vorhanden sein eines If-Modified-Since auch gleich um das Checken des Änderungsdatums der Datei und eine entsprechende Antwort kümmert, wie das bei einer statischen, nicht von mod_asis behandelten Datei auch der Fall wäre.

      Und bzgl. Doku, siehe meine Antwort an Vinzenz, ich dachte
      “and may also use the CGI Status: header to determine the HTTP response code”
      hätte in der Hinsicht vielleicht noch irgendeine Bedeutung, die mir verborgen geblieben wäre.

      Via "mod_perl" könntest Du in die fraglichen Phasen der Verarbeitung eingreifen und das gewünschte Verhalten mit überschaubar vielen Zeilen Code umsetzen.

      Das ist mir klar, aber nicht Sinn der „Übung“ :-)

      MfG ChrisB

      --
      RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
  2. Hi,

    ich experimentiere gerade ein bisschen mit dem Modul mod_asis vom Apachen (2.2) herum.

    Experimentieren an sich ist nicht verkehrt...

    Bilder, CSS, Scripte damit ausliefern, alles kein Problem, wenn die passenden HTTP-Header in die jeweiligen Dateien mit hineingeschrieben werden.

    ... aber das klingt nach einer Verquickung von Projektverwaltung mit Serverkonfiguration. Willst Du das wirklich?

    Scnr;
    Hotti

  3. Hallo Chris,

    ich experimentiere gerade ein bisschen mit dem Modul mod_asis vom Apachen (2.2) herum.

    Nur, wie kann man damit Caching mittels Last-Modified/If-Modified-Since implementieren?
    (Die Frage mag eher theoretischer Natur sein und die Gegenfrage „wozu willst du das überhaupt machen?“ provozieren; aber mich würde trotzdem interessieren, ob sich das bewerkstelligen liesse.)

    die apache-Leute scheinen sich dieser Problematik bewußt zu sein, allerdings scheint die Bereitschaft, daran etwas zu ändern, eher gering zu sein. Der letzte Satz in der Doku (1.3, 2.0 und 2.2) des Moduls lautet übereinstimmend

    "The server does not add a Last-Modified header; it probably should."

    Freundliche Grüße

    Vinzenz

    1. Hi,

      die apache-Leute scheinen sich dieser Problematik bewußt zu sein, allerdings scheint die Bereitschaft, daran etwas zu ändern, eher gering zu sein. Der letzte Satz in der Doku (1.3, 2.0 und 2.2) des Moduls lautet übereinstimmend

      "The server does not add a Last-Modified header; it probably should."

      Das ist mir nicht entgangen - aber den kann ich beim „erzeugen“ meiner Dateien ja schon selber einbauen (bzw. habe ich auch).

      Ich hatte nur gedacht,
      “In particular, HTTP headers are derived from the file itself according to mod_cgi rules, so an asis file must include valid headers, and may also use the CGI Status: header to determine the HTTP response code.”
      der letzte Halbsatz hier würde noch irgendeine Möglichkeit aufzeigen, den Status-Header „dynamisch“ generieren zu lassen.

      Ich habe allerdings keine Erklärung finden können, was genau “the CGI Status: header” in diesem Zusammenhang sein soll.

      MfG ChrisB

      --
      RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?