Der kleine Diktator: Korrektur des Datum in Last-Modified

Last-Modified, das ist ein Header, der beinhaltet eine sekundengenaue Zeitangabe einschließlich einer Abkürzung für den Wochentag (i.e. Mon, Tue...). Nun habe ich rein provokativ mal die Abkürzung für den Wochentag geändert und guckst du, mein FF Browser macht was ER will: Er korrigiert.

Meine Frage ist: Machen das alle Browser? Falls ja, kann ich mir in Zukunft die Berechnung des Wochentages sparen.

Schöne Grüße, der mit dem Schnauzer

  1. Ooops, vielleicht korrigiert ja auch der Server, keine Ahnung wie ich das rauskriegen kann ; Idee ?

    --Schnauzer

    1. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

      Ooops, vielleicht korrigiert ja auch der Server, keine Ahnung wie ich das rauskriegen kann ; Idee ?

      indem Du auf dem Client die HTTP-Header ansiehst?

      Dafür gibt es Browser-Plugins

      Spirituelle Grüße
      Euer Robert
      robert.r@online.de

      --
      Möge der wahre Forumsgeist ewig leben!
      1. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

        Ooops, vielleicht korrigiert ja auch der Server, keine Ahnung wie ich das rauskriegen kann ; Idee ?

        indem Du auf dem Client die HTTP-Header ansiehst?

        Nein, da siehst Du nicht, ob das der Browser für sich selbst korigiert oder ob da der Server eingegriffen hat. Aber letztendlich ist das egal. Damit Du meine Idee überhaupt verstehst:

        Mir gehts um eine zentrale Verwaltung von Last-Modified. Erstens liegt nicht unter jeder Response-Seite eine Datei (mtime), zweitens reicht mir eine Genauigkeit über den Monat und drittens soll das alles automatisch ablaufen: Einheitlich für alle Seiten, in denen per Konfiguration das Senden von Last-Modified nicht unterdrückt werden soll.

        Nun, es waäre ja genauso unsinnig, wie zu einfach, beim Ausliefern einer Response jedesmal den aktuellen Timestamp aus dem System zu lesen. Unsinnig deswegen, weil es da alle Sekunden einen neuen Last-Modified-Header geben würde. Wir brauchen Quantensprünge, die ein bischen größer sind, da ist als Nächstes der Monat naheliegend. Somit können wir unsere Funktion bei JEDEM Request aufrufen, denn einen neuen Last-Modified-Header gibt es erst dann, wenn der Monat rum ist und das alles geht wie von Zauberhand bewegt ganz automaisch ohne unser weiteres Zutun.

        Es ist nur nicht ganz so 'sauber' wenn ich den Tag auf '01' setze und und einen Wochentag dazutu, den wir gerade eben haben, denn das stimmt nicht immer überein. Was die Uhrzeit betrifft, ist '00:00:00' natürlich in Ordnung.

        Nächste Woche in Produktion :) Und danke für alle sachdienlichen Hinweise.

  2. Tach!

    Machen das alle Browser? Falls ja, kann ich mir in Zukunft die Berechnung des Wochentages sparen.

    Berechnest du die Ausgabe des Datums etwa zu Fuß? Das ist doch ein Standardformat, für das die Datumsformatierroutinen eine Abkürzung haben.

    dedlfix.

    1. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

      Tach!

      Machen das alle Browser? Falls ja, kann ich mir in Zukunft die Berechnung des Wochentages sparen.

      Berechnest du die Ausgabe des Datums etwa zu Fuß? Das ist doch ein Standardformat, für das die Datumsformatierroutinen eine Abkürzung haben.

      mWn gibt es noch keine fertige Funktion für den Response-Header, aber den Wochentagnamen liefert gmdate()

      $response_last_modified = gmdate('D, d M Y H:i:s', $timestamp) . ' GMT';  
      

      Spirituelle Grüße
      Euer Robert
      robert.r@online.de

      --
      Möge der wahre Forumsgeist ewig leben!
      1. Tach!

        Das ist doch ein Standardformat, für das die Datumsformatierroutinen eine Abkürzung haben.

        mWn gibt es noch keine fertige Funktion für den Response-Header, aber den Wochentagnamen liefert gmdate()

        $response_last_modified = gmdate('D, d M Y H:i:s', $timestamp) . ' GMT';  
        

        Das sieht doch sehr nach RFC 822/2822 aus, was im wesentlichen dem entspricht ist, was aktuell ist. Und dafür hat PHP die Abkürzung r. Ob aber der OP PHP verwendet, geht aus seinem Posting nicht hervor.

        dedlfix.

        1. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

          Tach!

          Das ist doch ein Standardformat, für das die Datumsformatierroutinen eine Abkürzung haben.

          mWn gibt es noch keine fertige Funktion für den Response-Header, aber den Wochentagnamen liefert gmdate()

          $response_last_modified = gmdate('D, d M Y H:i:s', $timestamp) . ' GMT';  
          

          Das sieht doch sehr nach RFC 822/2822 aus, was im wesentlichen dem entspricht ist, was aktuell ist. Und dafür hat PHP die Abkürzung r. Ob aber der OP PHP verwendet, geht aus seinem Posting nicht hervor.

          sieht so aus, als hätte ich wieder was gelernt :-)

          $response_last_modified = date('r', $file_timestamp);
          

          Spirituelle Grüße
          Euer Robert
          robert.r@online.de

          --
          Möge der wahre Forumsgeist ewig leben!
    2. Tach!

      Machen das alle Browser? Falls ja, kann ich mir in Zukunft die Berechnung des Wochentages sparen.

      Berechnest du die Ausgabe des Datums etwa zu Fuß? Das ist doch ein Standardformat, für das die Datumsformatierroutinen eine Abkürzung haben.

      Ja, die Abkürzung kommt in Form eines Perl-Module named HTTP::Date mit einer Dateigröße von 10 KiloByte daher und ich frage mich allen Ernstes, ob ich dieses Module weiterhin einbinden soll anstelle eines Einzeilers ;)

      Denn: Auf die Sekunde kommt es nicht an, GMT setzen wir dann einfach auf 00:00:00 GMT. Den Tag setzen wir (ich) einfach auf den 1. des Monat (aus Dateidatum oder aus dem Default-Config-Block), das Jahr liegt ebenfalls irgendwo griffbereit herum und ob der 1. des Monats ein Montag, Sun, Tue oder sonstewas ist, das kann mir egal sein, weil sich der Browser eh selber drum kümmert.

      Haleluja :) Sog i

      1. Überschlafen. Um aus dem etwas sinnlos erscheinenden Gedankenspiel von gestern (schade, gerade gestern wollte ich mal wieder so richtig was Blödsinniges machen) was Geistvolles abzugewinnen:

        Perls gmtime() liefert im skalaren Kontext sowas "Thu Jan 1 00:00:01 1970", da ist alles drin, was ein Zeitstempel liefert und diesdas muss nur ein bischen umgestellt werden, damit sowas "Tue, 23 Jun 2015 20:48:49 GMT" dabei rauskommt.

        Piz da Perez.

  3. Nun habe ich rein provokativ mal die Abkürzung für den Wochentag geändert und guckst du, mein FF Browser macht was ER will: Er korrigiert.

    Meine Frage ist: Machen das alle Browser?

    Im Zweifel: Nein.

    Die Wochentagsangabe ist an dieser Stelle so überflüssig wie ein Kropf und nur einer üblichen Vorgehensweise, einem Standardformat geschuldet.

    Dein Browser korrigiert auch womöglich nicht die fehlerhafte Angabe im eigentlichen Sinne, sondern liest lediglich das Datum aus, um es in einen internen Wert umzuwandeln (für den Cache-Vergleich). Bei der Rückumwandlung für deine Anzeige kommt dann von ganz alleine der richtige Wochentag heraus. Das wäre also ein unerwarteter Nebeneffekt und du kannst nicht davon ausgehen, dass andere Software dir nicht vielleicht doch das fehlerhafte Original vorlegt.

    1. Herzlichen Dank für Deine Antwort :)

      Nunja, was lange gährt wird wut, hier ist ein Ergebnis:

      # HTTP Header for:
      # Last-Modified
      # Expires
      sub http_date{
          my $self = shift;
          my $time = shift || time;
          my $p = [ split /\s+/, scalar(gmtime($time)) ];
          # Thu Jan  1 00:00:01 1970
          # Tue, 23 Jun 2015 20:48:49 GMT
          return sprintf("%s, %02d %s %d %s GMT",
              $p->[0],
              $p->[2],
              $p->[1],
              $p->[4],
              $p->[3]
          );
      }
      

      Und gut, dass wir darüber gesprochen haben ;)

      Schöne Grüße, Alfredo da Perez (Diktator a.D.)

      1. Perl wäre nicht Perl, wenn es nicht noch schöner gänge:

        # HTTP Header for:
        # Last-Modified
        # Expires
        sub http_date{
            my $self = shift;
            my $time = shift || time;
            my %h = ();
            @h{qw(wday month day hms year)} = split /\s+/, scalar(gmtime($time));
            # Thu Jan  1 00:00:01 1970
            # Tue, 23 Jun 2015 20:48:49 GMT
            return sprintf("%s, %02d %s %d %s GMT",
                $h{wday},
                $h{day},
                $h{month},
                $h{year},
                $h{hms}
            );
        }
        

        Schöner deswegen, weil Namen statt Index.

        Schöne Grüße, Alfredo da Perez