Last-Modifiend wird für text/html nicht gesendet

Alles, was den Apache betrifft, kann hier besprochen werden.

Last-Modifiend wird für text/html nicht gesendet

Postby ch.ey » 27. March 2004 19:02

Hi,

viele Server senden für text/css und Bilddateien wie image/jpg und
image/png den Last-Modified: und ETag: Header mit, aber nicht für text/html.
Das ist genau das gleiche Verhalten das mein installierter Apache2 (XAMPP 1.4.3) zeigt.

Die Server von Strato aber (Apache 1.3), tun das auch bei text/html, also ist es doch konfigurierbar.
1. Mit welcher Option?
2. Ist es nicht gern gesehen, problematisch, oder warum ist es per Default aus? Immerhin wird dadurch verhindert, daß der Browser einen conditional GET (If-Modified-Since), der Bandbreite sparen kann, schickt.

BTW, es ist egal ob ich statische oder PHP-generierte Seiten teste.

Christian
ch.ey
 
Posts: 3
Joined: 27. March 2004 18:49

Postby Wiedmann » 27. March 2004 19:34

Schau dir mal die Direktive FileETag und bei der Direktive IndexOptions die Option TrackModified an.

Vielleicht kannst du das ja damit "korrigieren".
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby ch.ey » 28. March 2004 13:39

Wiedmann wrote:Schau dir mal die Direktive FileETag und bei der Direktive IndexOptions die Option TrackModified an.

Vielleicht kannst du das ja damit "korrigieren".


Ne, das wird nix.
Erstere bezieht sich auf die Daten, die in ETag mit einfliessen und die andere auf Directory Listings.
Es ist ja auch nicht so, daß der Last-Modified nicht generiert wird. Wird er ja, aber nicht für text/html.

Christian
ch.ey
 
Posts: 3
Joined: 27. March 2004 18:49

Postby Wiedmann » 28. March 2004 14:08

Mal eine Frage. Wie überprüfst du das?
Die Idee von mir war halt folgende:

mod_autoindex - IndexOptions - TrackModified
This returns the Last-Modified and ETag values for the listed directory in the HTTP header. Some Unix systems do so, as do OS2's JFS and Win32's NTFS volumes. OS2 and Win32 FAT volumes, for example, do not. Once this feature is enabled, the client or proxy can track changes to the list of files when they perform a HEAD request.

HTTP/1.1 - 9.4 HEAD

The HEAD method is identical to GET except that the server MUST NOT return a message-body in the response. The metainformation contained in the HTTP headers in response to a HEAD request SHOULD be identical to the information sent in response to a GET request. This method can be used for obtaining metainformation about the entity implied by the request without transferring the entity-body itself. This method is often used for testing hypertext links for validity, accessibility, and recent modification.

The response to a HEAD request MAY be cacheable in the sense that the information contained in the response MAY be used to update a previously cached entity from that resource. If the new field values indicate that the cached entity differs from the current entity (as would be indicated by a change in Content-Length, Content-MD5, ETag or Last-Modified), then the cache MUST treat the cache entry as stale.


Also bin ich mal davon ausgegangen, daß ein Browser wenn ihn interessiert, erst mal einen head-Request macht um an die Info bezüglich einer evtl. Änderung zu kommen. Und ein head-Request wird von mod_autoindex ausgewertet.
Oder er holt es aus einem meta-tag im head-Teil der html-Datei.

NACHTRAG:
Vielleicht hilft ja: mod_expires

(Ups *g* sollte natürlich einen Link zum offiziellen Manual machen und nicht auf mein Lokales... ist geändert)

Scheint aber ansonsten ein Fehler im Apache zu sein (falls der noch nicht behoben ist):
http://bugs.php.net/bug.php?id=17098
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby ch.ey » 28. March 2004 21:05

Wiedmann wrote:Mal eine Frage. Wie überprüfst du das?


Sowohl mit Ethereal als auch direkt einen GET über telnet absetzen. Auch das Tool Live HTTP headers für Mozilla zeigt die übertragenen Header an.

Also bin ich mal davon ausgegangen, daß ein Browser wenn ihn interessiert, erst mal einen head-Request macht um an die Info bezüglich einer evtl. Änderung zu kommen. Und ein head-Request wird von mod_autoindex ausgewertet.
Oder er holt es aus einem meta-tag im head-Teil der html-Datei.


Die Sache läuft doch so, daß der Server mit jeder 200-Antwort einen Last-Modified bzw Etag liefert. Der Browser merkt sich den Wert und sendet (wenn er nicht gerade einen Komplett-Reload plant) mit dem GET If-Modiefied-Since bzw. If-None-Match mit. Daraufhin kann der Server enscheiden ob eine 200- oder eine 304-Antwort ausgegeben wird.
Das hat mit Directory-Listing nix zu tun. Und auch ein HEAD-Request wäre unnötiger Traffic.

Eine generelle Sache in Apache scheint's aber nicht zu sein. Denn ich habe mir gerade mal minixampp 1.4 auf Windows installiert. Da wird Last-Modified auch für text/html übertragen.
Meine bisherigen Versuche hatte ich unter Linux gemacht.
Ich find' leider keinen Unterschied in der Konfiguration, der das ausmachen kann.

Christian
ch.ey
 
Posts: 3
Joined: 27. March 2004 18:49

Postby Wiedmann » 28. March 2004 21:44

Danke für die Ausführung muß ich mal testen.

In dem Bugreport von meinem letzten Link schreiben die auch nur von Linux.

Mit dem Testen... *schäm* hab mir sogar mal ein Script gemacht um mir den gelierferten Header anzeigen zu lassen. Auch wenns mir nur darum ging die Erreichbarkeit einer Seite zu testen. Und halt den Statuscode, ob's ein Redirekt o.ä. ist.

Der Wert ist mir noch nie aufgefallen. Versteh das gar nicht.... Wird aber, wie mir ein Test bei mir grad zeigt, tatsächlich angezeigt (Apache unter Windows).

NACHTRAG:
Hab das mal genauer getestet. Bei HTML-Dateien bekomm ich die Daten immer.
Bei PHP-Dateien nicht. Da müsste ich über den Befehl header() selbst dafür sorgen, oder halt beim Apache mod_expire benutzen.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Wiedmann » 31. March 2004 13:20

So,
das mit dem fehlenden Last-Modified im Header von PHP-Skripten läßt sich doch viel einfacher lösen. Man muß nur "last_modified = On" in die php.ini eintragen. Den gibts normal noch nicht und muss erstellt werden. Standard bei diesem Wert ist "off". Da es ein PHP_INI_ALL ist, kann man den auch woanders unterbringen. ETag gibt aber immer noch keinen.

(Hätte die Doku vielleicht doch genauer lesen sollen *g*)
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany


Return to Apache

Who is online

Users browsing this forum: No registered users and 4 guests