2012-04-06 3 views
0

Warum manchmal ich ein Bild (oder CSS, JS, etc) an FTP senden, sie sind nicht hochgeladen (oder zwischengespeichert)?Firebug Anfrage mit Double "/" nach FTP-Übertragung

#container { 
    background: url("../images/bg.jpg") no-repeat scroll 0 0 transparent; 
    height: 895px; 
    overflow: hidden; 
} 

Aber mit // (../images//bg.jpg), kann ich das neue Bild

#container { 
    background: url("../images//bg.jpg") no-repeat scroll 0 0 transparent; 
    height: 895px; 
    overflow: hidden; 
} 

Antwort

1

Es scheint, dass die Dateien hochgeladen werden, aber vom Browser zwischengespeichert.

Versuchen Sie, mit STRG + F5 in Firefox/IE neu zu laden (andere Browser können andere Abkürzungen haben) und Sie sollten immer die neue Datei sehen.

Ressourcen (JS, CSS und Bilddateien) werden vom Browser irgendwie aggressiver zwischengespeichert. Während für HTML-Seiten in der Regel bei jeder Aktualisierung eine neue HTTP-Anforderung angezeigt wird, wird für Ressourcen manchmal überhaupt keine HTTP-Anforderung generiert. Sie können es sehen, indem Sie z. im Firebug's Net Panel.

Caching ist im Allgemeinen ein sehr schwieriges Thema, viel hängt von den Einstellungen und der Implementierung des Servers und des Browsers ab.

Browser-Caching wird im Allgemeinen über eine exakte URL-Anpassung implementiert. Also, http://someserver/bg.jpg und http://someserver//bg.jpg sind zwei völlig unterschiedliche URLs. Viele HTTP-Server gehen jedoch davon aus, dass Sie den gleichen Inhalt angefordert haben, und senden den Inhalt der Datei bg.jpg, die in Ihrem Serverstammordner gespeichert ist (Sie müssen den Unterschied zwischen der URL und dem mit dieser URL verknüpften Inhalt sehen).

Wenn Sie die erste URL besucht haben, wird sie vom Browser zwischengespeichert. Nachdem Sie eine neue Version des Images hochgeladen haben, hängt vieles davon ab, wie das Caching im Browser implementiert wird und welche Cache-Einstellungen der Server beim ersten Download von "bg.jpg" gesendet hat. Zum Beispiel könnten die Servereinstellungen, die im HTTP-Response-Header mit dem Bild gesendet wurden, sein, dass das Bild für die nächsten 1 Stunde vom Browser zwischengespeichert und direkt aus dem Cache geladen werden kann, ohne den Server zu fragen (die Servereinstellungen mögen) auf diese Weise konfiguriert werden, um unnötigen Datenverkehr zu vermeiden).

Die (ein bisschen hacky, aber ziemlich häufig verwendete) Möglichkeit, immer eine 'frische' Version der Datei zu bekommen, ist, einen aktuellen Zeitstempel zur Anfrage hinzuzufügen (aber es ist generell auf serverseitige Generierung oder in JavaScript beschränkt Skripte) - macht in CSS wenig Sinn.

also zu der Zeit ich es schreiben, wird das Skript fragen Sie den Server für http://someserver/bg.jpg?1334442703 aber ein paar Sekunden später, als ich die Seite aktualisieren, wird es http://someserver/bg.jpg?1334442711

Die meisten Server werden die Query-String verwerfen (Zeichenkette nach '?'), und gibt einfach den gleichen Inhalt der bg.jpg Datei für beide Abfragen zurück, aber da die URLs für die Bilder unterschiedlich sind, sollte keiner der Browser das Bild aus dem Cache lesen.

+0

Awesome Erklärung =) –

+0

Danke :) Vielleicht möchten Sie einen sehr guten Artikel über Browser-Caches und Proxy-Caches hier lesen: http://www.mnot.net/cache_docs/ –

+0

Sicher werde ich lesen. Vielen Dank. –