Nicolas Krzywinski: Meta-Angabe "expires" - gleiches für Einzelelemente?

Hallo an alle,

ich habe folgendes Thema: Auf einer meiner Seiten wird mittels einer kleinen Grafik angezeigt, ob ein Server on- oder offline ist.

Im Hintergrund realisiert habe ich das so, dass auf meinem Server bei Start des betreffenden Serverprogrammes das Bildchen server.gif durch serverON.gif überschrieben wird. Bei Beendigung des Serverprogrammes wird server.gif durch serverOFF.gif überschrieben.

Nun ist das auch alles ganz toll und funktioniert auch alles. Irritierend ist nur das Browser- oder Proxy-Caching wenn sich der Status gerade geändert hat. Denn dann wird unbeirrt das veraltete Bildchen angezeigt, bis man es in einem eigenen Fenster öffnet und dort explizit reloaded (Kontextmenü-Reloading hilft nicht, das scheint sich mit dem Reload aus einem Proxy oder so zufrieden zu geben..).

Das ist zwar auch nicht so dramatisch, damit ist die Lösung aber nicht perfekt.
Da ich von meinen ersten Schritten auf SelfHTML noch etwas derartiges im Kopf hatte, machte ich mich auf die Suche nach der Meta-Angabe "expires". Ich wusste nicht mehr, dass es eine Meta-Angabe war und damit beginnt das Problem: ich will nicht meine komplette Seite mit dieser Meta-Angabe versehen, nur wegen der einen kleinen Grafik auf der Hauptseite.
Um diese Angabe bei den Unterseiten herauszufiltern, müsste ich in den PHP-Header auch noch eine Abfrage einbauen, damit diese Meta-Angabe nur bei der Hauptseite mit eingebaut wird.

OK, auch alles nicht dramatisch, aber schön finde ich diese Lösung nicht.

---

Langer Rede, kurzer Sinn - hier meine Frage:
Kann ich auch für eine einzelne Grafik eine ähnliche Angabe machen, sodass diese Grafik IMMER direkt von der Quelle geladen wird und nie irgendwo gecached wird?

---

Ich glaube zwar nicht, dass es dafür eine einfache Angabe gibt, aber vielleicht hat jemand eine Idee, dieses sonstwie zu realisieren, ohne mit der Meta-Angabe auf Spatzen zu schießen.. ;)

Gruß,
Nicolas Krzywinski

  1. Hi,

    Um diese Angabe bei den Unterseiten herauszufiltern, müsste ich in den PHP-Header auch noch eine Abfrage einbauen, damit diese Meta-Angabe nur bei der Hauptseite mit eingebaut wird.

    Meta-Angaben sind lediglich Empfehlungen an die Browser. Weitaus stärker werden den Angaben im HTTP-Header berücksichtigt. Warum gibst Du nicht einfach hier geeignete Werte für expires und Last-Modified an?

    freundliche Grüße
    Ingo

    1. Meta-Angaben sind lediglich Empfehlungen an die Browser. Weitaus stärker werden den Angaben im HTTP-Header berücksichtigt. Warum gibst Du nicht einfach hier geeignete Werte für expires und Last-Modified an?

      Versteh ich nicht ganz. Die Meta-Tags sind doch Elemente des Headers. Was meinst du sonst mit Angaben im HTTP-Header? Als "link"-Angabe habe ich nichts derartiges gefunden..
      Außerdem ginge es mir eher um eine Lösung ohne durch den Header die komplette Seite zu beeinflussen.

      Grüße,
      Nicolas Krzywinski

      1. Hi,

        Meta-Angaben sind lediglich Empfehlungen an die Browser. Weitaus stärker werden den Angaben im HTTP-Header berücksichtigt. Warum gibst Du nicht einfach hier geeignete Werte für expires und Last-Modified an?
        Versteh ich nicht ganz. Die Meta-Tags sind doch Elemente des Headers.

        Nein. Du verwechselst HTTP mit HTML.
        Diese Seite t.B. wurde mir mit folgendem HTTP-Header vom Server ausgeliefert:

        HTTP/1.1 200 OK
        Date: Fri, 12 Aug 2005 16:17:48 GMT
        Server: Apache/1.3.33 (Unix)  (Gentoo/Linux) mod_auth_pgsql/0.9.12 PHP/4.3.11 mod_gzip/1.3.26.1a
        Cache-Control: public, max-age=60
        Expires: Fri, 12 Aug 2005 16:18:48 GMT
        Vary: Accept-Encoding
        Last-Modified: Fri, 12 Aug 2005 16:17:41 GMT
        Connection: close
        Content-Type: text/html; charset=UTF-8
        Content-Encoding: gzip
        Content-Length: 3449

        Den Inhalt des head-Elements der HTML-Datei siehst Du im Quelltext. Meta-Angaben zum "Verfallsdatum" wirst Du hier allerdings nicht finden. Aber an die Angaben im HTTP-Header hält sich mein Browser recht gut...

        freundliche Grüße
        Ingo

        1. Nein. Du verwechselst HTTP mit HTML.

          Hmm stimmt, hab ich verwechselt..

          Den Inhalt des head-Elements der HTML-Datei siehst Du im Quelltext. Meta-Angaben zum "Verfallsdatum" wirst Du hier allerdings nicht finden. Aber an die Angaben im HTTP-Header hält sich mein Browser recht gut...

          Nur verstehe ich jetzt nicht ganz, wie ich den HTTP-Header beeinflussen kann. Wird er nicht durch die Meta-Angaben im HTML-Quelltext gefüllt?
          Wenn nein, woher bezieht er seinen Inhalt und wie könnte ich ihn beeinflussen?

          1. Hi,

            Nur verstehe ich jetzt nicht ganz, wie ich den HTTP-Header beeinflussen kann. Wird er nicht durch die Meta-Angaben im HTML-Quelltext gefüllt?

            Nein.

            Wenn nein, woher bezieht er seinen Inhalt und wie könnte ich ihn beeinflussen?

            Was verstehst Du bei "serverseitig" nicht?
            Du müßtest schon Zugriff auf die Serverkonfiguration haben oder die Dateien mitsamt Header über eine serverseitige Scriptsprache ausgeben. In einer normalen Konfiguration übernimmt der Server lediglich das Erstellungsdatum der Dateien und beantwortet entsprechende Requests ggfls. mit 304 - not modified.

            freundliche Grüße
            Ingo

            1. Was verstehst Du bei "serverseitig" nicht?

              "server" ist ein sehr dehnbarer Begriff

              Du müßtest schon Zugriff auf die Serverkonfiguration haben oder die Dateien mitsamt Header über eine serverseitige Scriptsprache ausgeben. In einer normalen Konfiguration übernimmt der Server lediglich das Erstellungsdatum der Dateien und beantwortet entsprechende Requests ggfls. mit 304 - not modified.

              D. h. ich müsste am Apachen ansetzen? Hmm, in diese Richtung hatte ich noch gar nicht gedacht..
              Da könnte ich mich mal einlesen.

              Tatsache ist, dass die Website auf verschiedenen Servern liegt, die betreffende Grafik jedoch nur auf einem - meinem Homeserver, auf dem auch die Serverapplikation gestartet wird.
              Die Angabe für das zwingende Neuladen müsste ich also beim Zugriff auf die Grafik mitsenden - werden Informationen mit jeder Datei mitgeschickt?

              Mag sein, dass meine Überlegungen jetzt etwas dumm klingen, aber bis auf die Grundkonfiguration des Apachen kenne ich mich in der Gegend nicht besonders aus..

              Danke auf jeden Fall schonmal für den Hinweis in Richtung Indianer und viele Grüße,
              Nicolas Krzywinski

              1. Hi,

                Die Angabe für das zwingende Neuladen müsste ich also beim Zugriff auf die Grafik mitsenden - werden Informationen mit jeder Datei mitgeschickt?

                Ja. Ohne HTTP-Header wüßte der Browser nicht viel mit der Datei anzufangen (ok, der IE ist auch hier für sein Ratetalent berüchtigt;-)
                Was Du allerdings über HTML machen könntest: die Grafik jedesmal mit einen neuen Parameter referenzieren. /grafik.gif?200508122038 ist eine andere Resource als /grafik.gif?200508122039, auch wenn der Server dieselbe Datei ausliefert.

                freundliche Grüße
                Ingo

                1. Ja. Ohne HTTP-Header wüßte der Browser nicht viel mit der Datei anzufangen (ok, der IE ist auch hier für sein Ratetalent berüchtigt;-)

                  Aha! Obwohl ich schon öfters mal die Logs vom Apachen durchgesehen habe, ist mir das nie so bewusst aufgefallen!
                  In die Richtung werde ich mal gucken..

                  Was Du allerdings über HTML machen könntest: die Grafik jedesmal mit einen neuen Parameter referenzieren. /grafik.gif?200508122038 ist eine andere Resource als /grafik.gif?200508122039, auch wenn der Server dieselbe Datei ausliefert.

                  Ja, diese Überlegung ist aber ganz am Anfang herausgefallen, da ich keine Code-Änderungen machen möchte, weil das auch etwas kompliziert wäre, da der "Code" bzw. Inhalt aus dem MySQL-Server kommt.

                  Mit dem Apachen werde ich mich aber mal eingehends unterhalten, danke nochmals für den Hinweis!

                  Viele Grüße,
                  Nicolas Krzywinski