Binärdateien werden nicht angezeigt
Tilo Roeder
- webserver
Hallo zusammen,
ich hab folgendes Problem:
auf einem Linux läuft wunderbar ein Apache - alles funktioniert, HTML-datein, Bilder etc. - ein Teil der Dokumente liegen aber auf einem 2003-Server via Samba gemountet - Berechtigung etc ist alles kein Problem - HTML-Dateien, TXT-Dateien etc. werden korrekt angezeigt, Binärdateien (Bilder, pdf, mp3 etc.) jedoch nicht - die Dateien existieren - es werden jedoch 0 Byte übertragen. Die sist nur bei dem smbfs-gemounteten Bereich so.
Die access.log sagt mir nach dem Dokumentnamen immer nur Code 304 statt 200 für ok - die 304 heißt irgendwas mit "Datei nicht geändert, browser soll sie aus dem Cache nehmen"
Aber was soll das, wie kann ich den Fehler beheben?
Gruß Tilo
Hallo,
auf einem Linux läuft wunderbar ein Apache - alles funktioniert, HTML-datein, Bilder etc. - ein Teil der Dokumente liegen aber auf einem 2003-Server via Samba gemountet - Berechtigung etc ist alles kein Problem - HTML-Dateien, TXT-Dateien etc. werden korrekt angezeigt, Binärdateien (Bilder, pdf, mp3 etc.) jedoch nicht - die Dateien existieren - es werden jedoch 0 Byte übertragen. Die sist nur bei dem smbfs-gemounteten Bereich so.
Die access.log sagt mir nach dem Dokumentnamen immer nur Code 304 statt 200 für ok - die 304 heißt irgendwas mit "Datei nicht geändert, browser soll sie aus dem Cache nehmen"Aber was soll das, wie kann ich den Fehler beheben?
304 DARF ein Webserver nur verwenden, wenn der Browser ein "Conditional GET" sendet, d.h. ein GET-Request, bei dem If-Modified-Since oder If-None-Match-Header anwesend waren. Was passiert da? Der Browser hat in dem Fall die Datei schonmal angefordert und in dem Zusammenhang ein Last-Modified-Datum oder einen ETag bekommen. Und diese Daten steckt er dann in die entsprechenden If-Header. Erkennt der Webserver, dass das noch aktuell ist, gibt er dem Browser die Antwort 304 zurück, d.h. "Du brauchst das nicht nochmal runterladen". Wenn der Webserver erkennt "oh, da hat sich etwas geändert", dann sind die Daten offensichtlich nicht mehr aktuell.
Auf eine Anfrage OHNE If-None-Match oder If-Modified-Since DARF ein Webserver keinen Statuscode 304 liefern. Wenn er es doch tut, ist'S ein Bug. Mir ist allerdings noch kein Webserver begegnet, der so verbuggt wäre (und der Apache macht's definitiv richtig).
Was bei Dir genau für ein Fehler auftritt, kann ich Dir leider nicht sagen. Hast Du mal probiert, Deinen Browsercache zu leeren, um derartige Effekt auszuschließen? Ist zwischen Browser und Webserver evtl. noch ein Proxy? Was passiert, wenn Du auf der Linux-Kiste per »cp« auf der Kommandozeile eine Bild-Datei mal ins lokale Dateisystem kopierst - kommt die korrekt an?
Viele Grüße,
Christian
Hallo Christian,
ich habs durch Zufall gefunden - es scheint wirklich ein Bug zu sein die 304 zu senden, denn:
Aber in der Apache-conf folgende Parameter gefunden, geändert und es klappt :-)
EnableMMAP off
EnableSendfile off
Gruß und Dank,
Tilo